Python dict字典方法完全攻略 图片看不了?点击切换HTTP 返回上层
dir(dict)
来查看该类包含哪些方法。在交互式解释器中输入 dir(dict)
命令,将看到如下输出结果:
>>> dir(dict)
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
Python keys()、values() 和 items()方法
这 3 个方法之所以放在一起介绍,是因为它们都用来获取字典中的特定数据。keys() 方法用于返回字典中的所有键;values() 方法用于返回字典中所有键对应的值;items() 用于返回字典中所有的键值对。例如:
a = {'数学': 95, '语文': 89, '英语': 90} print(a.keys()) print(a.values()) print(a.items())运行结果为:
dict_keys(['数学', '语文', '英语'])
dict_values([95, 89, 90])
dict_items([('数学', 95), ('语文', 89), ('英语', 90)])
注意,在 Python 2.x 中,这三个方法的返回值是列表类型。但在 Python 3 中,并不是我们常见的列表和元组类型,因为 Python 3不希望用户直接操作这几个方法的返回值。如果想使用返回的数据,有以下 2 种方法:
-
使用 list() 函数,将它们返回的数据转换成列表,例如:
a = {'数学': 95, '语文': 89, '英语': 90} b = list(a.keys()) print(b)
运行结果为:['数学', '语文', '英语']
-
也可以利用多重赋值的技巧,利用循环结构将键或值分别赋给不同的变量,比如说:
a = {'数学': 95, '语文': 89, '英语': 90} for k in a.keys(): print(k,end=' ') print("\n---------------") for v in a.values(): print(v,end=' ') print("\n---------------") for k,v in a.items(): print("key:",k," value:",v)
运行结果为:数学 语文 英语
由于目前尚未学习 for 循环,初学者可先跳过此种方法,等学会 for 循环后再回过头来学习。
---------------
95 89 90
---------------
key: 数学 value: 95
key: 语文 value: 89
key: 英语 value: 90
Python copy()方法
copy() 方法用于返回一个具有相同键值对的新字典,例如:a = {'one': 1, 'two': 2, 'three': [1,2,3]} b = a.copy() print(b)运行结果为:
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
可以看到,通过 copy() 方法,就可以将字典 a 的数据拷贝给字典 b。注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy() 方法只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {'one': 1, 'two': 2, 'three': []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [1,2,3] 的值不是自己独有,而是和 a 共有。
例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]} b = a.copy() #向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。 a['four']=100 print(a) print(b) #由于 b 和 a 共享[1,2,3](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。 a['three'].remove(1) print(a) print(b)运行结果为:
{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [2, 3]}
Python update()方法
update() 方法可使用一个字典所包含的键值对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。
例如:
a = {'one': 1, 'two': 2, 'three': 3} a.update({'one':4.5, 'four': 9.3}) print(a)运行结果为:
{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}
从上面的执行过程可以看出,由于被更新的 dict 中已包含 key 为“one”的键值对,因此更新时该键值对的 value 将被改写;但如果被更新的 dict 中不包含 key 为“four”的键值对,那么更新时就会为原字典增加一个键值对。Python pop方法
pop() 方法用于获取指定 key 对应的 value,并删除这个键值对。如下方法示范了 pop() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} print(a.pop('one')) print(a)运行结果为:
1
{'two': 2, 'three': 3}
Python popitem()方法
popitem() 方法用于随机弹出字典中的一个键值对。注意,此处的随机其实是假的,它和 list.pop() 方法一样,也是弹出字典中最后一个键值对。但由于字典存储键值对的顺序是不可知的,因此 popitem() 方法总是弹出底层存储的最后一个键值对。
如下代码示范了 popitem() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} print(a) # 弹出字典底层存储的最后一个键值对 print(a.popitem()) print(a)运行结果为:
{'one': 1, 'two': 2, 'three': 3}
('three', 3)
{'one': 1, 'two': 2}
例如如下代码:
a = {'one': 1, 'two': 2, 'three': 3} # 将弹出项的key赋值给k、value赋值给v k, v = a.popitem() print(k, v)运行结果为:
three 3
Python setdefault()方法
setdefault() 方法也用于根据 key 来获取对应 value 的值。但该方法有一个额外的功能,即当程序要获取的 key 在字典中不存在时,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。也就是说,setdefault() 方法总能返回指定 key 对应的 value;如果该键值对存在,则直接返回该 key 对应的 value;如果该键值对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value。
如下代码示范了 setdefault() 方法的用法:
a = {'one': 1, 'two': 2, 'three': 3} # 设置默认值,该key在dict中不存在,新增键值对 print(a.setdefault('four', 9.2)) print(a) # 设置默认值,该key在dict中存在,不会修改dict内容 print(a.setdefault('one', 3.4)) print(a)运行结果为:
9.2
{'one': 1, 'two': 2, 'three': 3, 'four': 9.2}
1
{'one': 1, 'two': 2, 'three': 3, 'four': 9.2}