列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强。
所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典。
字典(dict)是python中唯?的?个映射类型.他是以{ }括起来的键值对组成。
在dict中key是 唯?的.在保存的时候, 根据key来计算出?个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的
可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址?规定的.
语法:{'key1':1,'key2':2}, 'key':键,1:值
字典的’键‘:
可哈希的——不可变的数据类型(int, str, tuple, bool),避免哈希冲突,使用了开放寻址法
不可哈希 的——可变的数据类型( list, dict, set)
要求唯一 : ——如果有重复的,后边的值将前边的值覆盖
字典的值:
可以任意
如果dict 中没有出现这个key,就会将key-value组合添加到这个字典中
没有就添加,有就改键的值
dic = {}
dic['david'] = 1992
print(dic)
result
{'david':1992}
如果dict中没有出现过这个key-value,可通过setdefault设置默认值
使用setdefault这个方法,里边放的这个内容是我们字典的键,添加到字典的值就是一个none
当setdefault中第一个参数存在这个字典中就不进行添加
dic= {}
a = dic.setdefault('科比')
print(a)
print(dic)
result
None
{'科比': None}
dic.pop()
通过字典的键进行删除键对值
删除有返回值,返回的是被删除的值,没有键
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
s = dic.pop('詹姆士')
print(s)
print(dic)
result
23
{'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
dic.popitem()
随机删除
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
s=dic.popitem()
print(s)
print(dic)
result
('麦迪', 1)
{'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3}
clear():清空
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic.clear()
print(dic)
result
{}
del
del dic[‘key‘]:通过字典的键删除键对值
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
del dic['詹姆士']
print(dic)
result
{'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
删除字典
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
del dic
print(dic)
result
报错NameError: name 'dic' is not defined
键在字典中存在的时候就是修改键对应的值
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic['詹姆士'] = 8
print(dic)
result
{'科比': 24, '詹姆士': 8, '艾弗森': 3, '韦德': 3, '麦迪': 1}
字典中没有键对值的时候就是添加,添加到字典的末尾
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic['乔丹'] = 23
print(dic)
result
{'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
update(dic)
update括号中的字典级别高于update前面的字典
当update中的字典没有dic中的键对值,就添加到dic中,
dic.updaate(dic1)
程序从左向右运行,即字典dic1添加到字典dic的末尾,且print(dic)。
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1={'乔丹':23}
dic.update(dic1)
print(dic)
result
{'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
for循环
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for i in dic:
print(i) #循环获取都是字典中每个键值对应的键
result
科比
詹姆士
艾弗森
韦德
麦迪
dic[key]:通过键来查,结果是键的值;如果键不在字典中,就会报错
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1 = dic['科比']
print(dic1)
result
24
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1 = dic['乔丹']
print(dic1)
result
报错:KeyError: '乔丹'
dic.get(key):通过键来查看,结果是键的值
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1 = dic.get('艾弗森')
print(dic1)
result
3
当字典中没有这个键,显示None
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1 = dic.get('乔丹')
print(dic1)
result
None
dic.get.(key,"内容"):我们可以在get查找的时候自己定义返回的结果
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
dic1 = dic.get('艾弗森',"忠艾一生")
print(dic1)
3
dic.setdefault(key),查询,none,则添加,有则可修改,可不添加
获取所有的键(keys)
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for i in dic.keys():
print(i)
result
科比
詹姆士
艾弗森
韦德
麦迪
key_list = dic.keys()
获取所有的值
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for i in dic.values():
print(i)
result
24
23
3
3
1
values_list = dic.values()
获取所有的键对值
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for k,v in dic.items():
print(k,v)
result
科比 24
詹姆士 23
艾弗森 3
韦德 3
麦迪 1
keys_values_list = dic.items()
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for i in dic.items(): #items获取的键对值是元祖
print(i)
result
('科比', 24)
('詹姆士', 23)
('艾弗森', 3)
('韦德', 3)
('麦迪', 1)
高仿列表
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
for i in dic:
print(i,dic.get(i))
result
科比 24
詹姆士 23
艾弗森 3
韦德 3
麦迪 1
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
print(dic.keys())
result
dict_keys(['科比', '詹姆士', '艾弗森', '韦德', '麦迪'])#高仿列表
a,b = 1,2
print(a,b)
结果:
1 2
a,b = ('你好','世界')
print(a,b)
结果:
你好 世界
a,b = {'汪峰':'北京北京','王菲':'天后'}
print(a,b)
结果:
汪峰 王菲
dic = {
'name':'汪峰',
'age':48,
'wife':[{'name':'国际章','age':38}],
'children':['第一个熊孩子','第二个熊孩子']
}
获取汪峰的妻子名字
d1 = dic['wife'][0]['name']
print(d1)
获取汪峰的孩子们
d2 = dic['children']
print(d2)
获取汪峰的第一个孩子
d3 = dic['children'][0]
print(d3)
原文:https://www.cnblogs.com/daviddd/p/12033365.html