一、什么是字典?
字典是python的基础数据类型之一,字典可以存储大量数据,关系型数据。
同样他也是python中唯一的映射关系的数据类型。
数据类型的分类
可变的(不可哈希)数据类型: list , dict, set
不可变的(可哈希的)数据 类型: str, int, bool, tuple
dic = { "name":"jin", "age":18, "sex":"male" }
键值对的形式存在的, 键:值
字典的键,必须是不可变的数据类型。( 工作吕,都是由数字,或者 str 组成 )
字典的值是任意数据类型。
优点:
字典可以存储大量的数据,关系型数据。
查询速度快。
python3.5 之前包括 3.5 版本,字典是无序的。
python3.6 开始,是有序的。 (就是插入的顺序)
二、字典的增删改查
2.1 增
dic = { "name":'孙悟空',"年龄":28,"sex":'male' }
# dic['job'] = 'IT' # 若键存在,会覆盖键对应的原有值;键不存在,添加该键值对
dic.setdefault('job','IT') # 若键不存在,添加之,否则什么操作也不作,而返回该键对应的值
dic.setdefault('sal') # 若仅指定第一个参数 键,而不指定第二个参数 value ,第二个参数默认为None
print(dic) # 输出结果: {'name': '孙悟空', '年龄': 28, 'sex': 'male', 'job': 'IT', 'sal': None}
2.2 删除
dic = { "name":'孙悟空',"年龄":28,"sex":'male' }
dic.pop(key) # 删除指定键对应的键值对,若指定键不存在,会报错;
dic.pop(key,"指定键不存在”) # 删除字典中指定键 对应的键值对,若指定键不存,返回第二个参数的内容
dic.popitem() # python3.5及以前,随机删除一个键值对,python3.6开始,由于字典是有序的了,删除最后一组键值对
dic.clear() # 清除所有的键值对,但字典还存在
del dic['name'] # 按照 键 ,删除对应的键值对,
del dic['name1'] # 若指定的 键 不存在,会抛出错误:KyeError: 'name1'
del dic # 从内存级别删除整个字典,字典不复存在了
2.3 改
dic = { "name":'孙悟空',"年龄":28,"sex":'male' }
dic['name'] = "chris" # 直接改
dic.update(name = "西瓜大王") # 覆盖添加
notes:
dic.update( 'name' = ""快乐大王) # 这里关键字不能加引号,否则报错:SyntaxError: keyword can't be an expression
2.4 查
dic = { "name":'孙悟空',"年龄":28,"sex":'male' }
print( dic['name'] ) # 按照 key 去查 ,键对应的值 ,缺点:如果键不存在,会报错
dic.get( 'name' ) # 若键不存在,不会报错,默认返回None
dic.get( 'name1', "指定的键不存在") # 若键不存在,自定义返回值
通过 for 循环 查:
dic.keys() 、 dic.values() 、 dic.items()
for key in dic.keys():
print(key,end=" ") # 输出结果:name 年龄 sex job sal
for value in dic.values():
print(value, end = " ") # 输出结果: 孙悟空 28 male IT None
for key,value in dic.items(): # 实际利用了分别赋值 原理: a,b = 10,20
print(key,value,end = " ") # 输出结果: name 孙悟空 年龄 28 sex male job IT sal None
三、字典的嵌套
四、产生字典的方法:
dic = {'name':'chris','age':18}
dict.fromkeys(iterable ,value)
dic.fromkeys(iterable,value)
dict() 方法
dict()方法,详解:
class dict(object):
"""
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)
"""
dic1 = dict() # dict() 产生一个新的空字典
print(id(dic1))
dic2 = {'name':'chris','age':28}
dic2_copy = dict(dic2.items()) # 根据映射对象的键值对,产生一个新的字典
print(id(dic2),id(dic2_copy)) # 2266685747488 2266685748856
print(dict([["one",1]])) # 将可迭代对象的每个元素的两个元素,分别赋值 k, v
print(dict(one=1,two=2)) # 通过关键字参数对 ,产生新的字典
# def func(x):return x%2 == 0
# ret = filter(func,[1,2,3,4,5,6,7])
# print(ret)
# for i in ret:
# print(i)
#
# def fmap(a,b):
# return (a,b)
# dic2 = {'name':'chris','age':18}
# print(dic2.items())
# ret = map(fmap,['name','age'],['chris',18])
# print(ret)
# # print(ret)
# # dict(ret)
# # print(fmap(3,5))
# print(dict(ret))
dic = {'name':'chris','age':18}
print(dic.items())
newdic = dict(dic.items())
print(newdic)