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个

七、字典常用方法(看看就可以)

  1. dict.clear() 删除字典内所有元素
  2. dict.copy() 返回一个字典的浅复制
  3. dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
  4. dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
  5. dict.items() 以列表返回可遍历的(键, 值) 元组数组
  6. dict.keys() 以列表返回一个字典所有的键
  7. dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  8. dict.update(dict2) 把字典dict2的键/值对更新到dict里
  9. dict.values() 以列表返回字典中的所有值
  10. pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
  11. popitem() 随机返回并删除字典中的一对键和值。

八、总结

记住以下几点:

1、字典的键值对是无序的( Python3.6 开始有序),值可修改,定义字典时键值( key=>value )必须成对出现;

2、字典的键(key)不可以重复,键重复时值以最后一个为准;

3、字典的键必须不可变,所以可以用数字,字元串或元组充当,而不能用列表等;

4、不管字典的数据量有多大,他们的访问速度都是一样的。


推荐阅读:
相关文章