Python3基础语法(六)--数据结构 dict字典
Dict 字典是无序(3.6版本后有序),可修改,它能存储任何数据,数据结构和json类似。
一、字典定义
字典的每个值都具备自己独有的名称即键( key ),每个 key 都有对应的值( value ),字典中的 key 和 value 必须成对出现 。整个字典包括在花括弧『{ }』中,它的每个键值 ( key => value )对使用冒号( : )分割,每对值之间用逗号( , )分割。
定义如记录人员成绩的字典,如下:
d = {Woodman: 95, Alan: 85, Bobo: 59}
我们把姓名 Woodman、Alan、Bobo 称为key,对应的成绩 95、85、59 称为value,dict 字典可以通过 key 来查找值,一个 key:value 算作一个值。
注意:dict字典用的键( key )必须是唯一的,但值则不必。一个字典中不能出现相同名称的键( key ),但值能相同,值可以是任何数据类型(字元串、数字、元组、列表、字典等)。
# 混合字典 key不重复,值可以是任意类型
d = {woodman: 98, 2.5: PM, Bobo: [89, 65, 34],Mydict: {Alan: 99}}
拓展:dict 的最大特点是查找速度快,无论 dict 有10个元素还是10万个元素,查找速度都一样。
二、访问字典
1、获取 dict 字典的值
我们可以使用 dict [ key ] 来获取所需要的值。
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
print(d[woodman])
print(d[9.86])
print(d[AA]) # 会抛出KeyError异常,表示无此键(key)
通过 key 访问 dict 的 value,只要 key 存在,dict就返回对应的 value。如果key不存在,会直抛出 KeyError 异常。
怎么避免KeyError错误?
有两种方法:
第一种使用 key in dict 选判读字典中是否存在此key;
另一种是 dict 自带的 ge t方法 dict.get(key) ,在 key 不存在的时候,返回 None
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
if woodman in d: # d字典中有woodman
print(d[woodman])
if Aric in d: # 判断字典中是否有Aric键
print(d[Aric])
print(d.get(Bobo)) # d字典中有Bobo,返回BoBo对应的值
print(d.get(my)) # d字典中无my,返回None
注意:dict 字典根据 key 存储值,他是无序的所以我们不能通过索引号访问数据( Python3.6 后字典为有序)
2、获取 dict 字典的所有的键 keys 和所有的值 values(获取的是key和values的迭代器)
dict.keys() # 获取所有键 key 的迭代器
dict.values() # 获取字典所有的值 value 的迭代器
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
print(d.keys()) # 获取字典所有的键的迭代器
print(d.values()) # 获取字典所有的值的迭代器
输出:
dict_keys([woodman, Bobo, Mydict, 9.86])
dict_values([98, [89, 65, 34], {Alan: 99}, GM])
三、新增与修改字典值
dict[key] = value 新增或修改字典值,当 key 不存在字典中时新增值,存在是则修改它的值
dict.update( otherdict ) 批量更新或增加值,根据o therdict 字典更新 dice 字典,otherdict 中有 dice 没有的值就新增,dice 中有的值就修改为 otherdict 中的值
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
d[Bobo] = 98 # 更新Bobo的值
print(d)
d[Aric] = 66 # 字典中无Aric的值,添加Aric
print(d)
d1 = {Aric: "Im Ariv", woodman: "Im woodman"}
d.update(d1) # 根据d1字典更新d字典,没有的值新增,有的值修改
print(d)
注意:我们 key 一旦定义我们不能修改 key
四、删除字典元素
dict.pop(key) 删除对应键值
dict.clear() 清空 dict
del dict[ key ] 删除对应键值
del dict 删除 dict,dict 无法访问
示例:
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
d.pop(9.86) # 删除9.86 对应的值
print(d) # 删除无9.86
del d[woodman] # 删除单个值
print(d) # 删除无woodman
d.clear() # 清空dict的键值,不会删除引用d
print(d) # d能访问
del d # 删除字典d所有的值
print(d) # 字典d无法访问,NameError异常
五、字典遍历
1、通过 key 遍历
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
for key in d:
print(d[key])
输出:
GM
98[89, 65, 34]{Alan: 99}
2、通过 dict.items 遍历
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
for key, value in d.items():
print(key, :, value)
输出:
9.86 : GM
Bobo : [89, 65, 34]Mydict : {Alan: 99}woodman : 98
六、字典常用函数
len( dict ) 计算字典元素个数,即键的总数
d = {woodman: 98, 9.86: GM, Bobo: [89, 65, 34], Mydict: {Alan: 99}}
print(len(d)) # 列印字典键的个数,4个
七、字典常用方法(看看就可以)
- dict.clear() 删除字典内所有元素
- dict.copy() 返回一个字典的浅复制
- dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
- dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
- dict.items() 以列表返回可遍历的(键, 值) 元组数组
- dict.keys() 以列表返回一个字典所有的键
- dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
- dict.update(dict2) 把字典dict2的键/值对更新到dict里
- dict.values() 以列表返回字典中的所有值
- pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
- popitem() 随机返回并删除字典中的一对键和值。
八、总结
记住以下几点:
1、字典的键值对是无序的( Python3.6 开始有序),值可修改,定义字典时键值( key=>value )必须成对出现;
2、字典的键(key)不可以重复,键重复时值以最后一个为准;
3、字典的键必须不可变,所以可以用数字,字元串或元组充当,而不能用列表等;
4、不管字典的数据量有多大,他们的访问速度都是一样的。
推荐阅读: