Python dict 字典操作
【参考】:
-
https://www.runoob.com/python/python-dictionary.html
1. 字典定义
字典是一种可变容器模型,且可存储任意类型对象。
字典由键值对{ key : value }组成,每个键值之间用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中,格式为:
d = {key1 : value1, key2 : value2 }
dict = {'a': 1, 'b': 2, 'b': '3'}
注意,字典的键是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
>>> dict = {'a': 1, 'b': 2, 'b': '3'}
>>> dict['b']
'3'
>>> dict
{'a': 1, 'b': '3'}
字典的值可以取任何数据类型,但键必须是不可变的类型,如字符串,数字或元组。
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }
2. 字典访问
2.1 dict[key]
在方括号中指定键(key),即可以获取对应的值(value)。
>>> d = {'a':1, 2: 'b'}
>>> d['a']
1
>>> d[2]
'b'
如果用字典里没有的键访问数据,则会报错:
>>> d['b']
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
d['b']
KeyError: 'b'
2.2 dict.get(key,default)
通过字典的get()方法,也可以获取键对应的值。
dict.get(key,[default]),其中default为可选项,用于指定当‘键’不存在时返回的默认值,如果省略,默认返回None。
>>> d = {'a':1, 2: 'b'}
>>> d.get('a')
1
>>> d.get('b',123)
123
>>> d.get('b')
>>>
3. 字典操作
3.1 修改键对应的值
直接对方括号引用的键值对赋值,dict[key] = new_value,即可完成字典中对应键值的修改。
>>> d = {'a':1, 2: 'b'}
>>> d['a']=2
>>> d
{'a': 2, 2: 'b'}
3.2 添加键值对
对字典中没有的键做引用赋值,dict[new_key] = new_value,即可向字典中增加键值对。
>>> d['b']=2
>>> d
{'a': 2, 2: 'b', 'b': 2}
3.3 删除键值对
使用del语句,可以实现对字典中键值对的删除,del dict[key]。
也可以用字典的pop()方法,完成对键值对的删除。
>>> del d['b']
>>> d
{'a': 2, 2: 'b'}
>>> d.pop(2)
'b'
>>> d
{'a': 2}
>>> del d
>>> d
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
d
NameError: name 'd' is not defined
如果要清空字典,可以使用字典的clear()方法,dict.clear()。
如果del dict不加键引用,会直接删除字典对象。
3.4 字典合并
建议使用字典的update()方法,将另一个字典更新入当前字典。
>>> d1 = {'a': 1}
>>> d2 = {2: 'b'}
>>> d = {}
>>> d
{}
>>> d.update(d1)
>>> d
{'a': 1}
>>> d.update(d2)
>>> d
{'a': 1, 2: 'b'}
对于键都是字符串的字典,也可以使用dict(d1.items() | d2.items()) 和 dict(d1, **d2)的方法。
-
dict(d1.items() + d2.items()) :d.items()方法会返回一个dict_items对象,类似与集合对象,不支持使用+ 操作符,但可以使用 | 操作符求合集,或使用 & 操作符求交集。
-
dict(d1, **d2) :需要字典键必须为字符串类型,否则报错:TypeError: keywords must be strings,因为**本质为形参和实参对的传递,而参数变量名不可以数字开头。
>>> d1 = {'a': 1}
>>> d2 = {2: 'b'}
>>> d1.items() | d2.items()
{('a', 1), (2, 'b')}
>>> dict(d1.items() | d2.items())
{'a': 1, 2: 'b'}
>>> d1.items() & d2.items()
set()
>>> dict(d1,**d2)
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
dict(d1,**d2)
TypeError: keywords must be strings
>>> d3 = {'b':2}
>>> dict(d1,**d3)
{'a': 1, 'b': 2}
4. 字典方法
4.1 外部函数
序号 |
函数及描述 |
1 |
比较两个字典元素。 |
2 |
计算字典元素个数,即键的总数。 |
3 |
输出字典可打印的字符串表示。 |
4 |
返回输入的变量类型,如果变量是字典就返回字典类型。 |
4.2 内置方法
序号 |
函数及描述 |
1 |
删除字典内所有元素 |
2 |
返回一个字典的浅复制 |
3 |
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 |
返回指定键的值,如果值不在字典中返回default值 |
5 |
如果键在字典dict里返回true,否则返回false |
6 |
以列表返回可遍历的(键, 值) 元组数组 |
7 |
以列表返回一个字典所有的键 |
8 |
dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 |
把字典dict2的键/值对更新到dict里 |
10 |
以列表返回字典中的所有值 |
11 |
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 |
返回并删除字典中的最后一对键和值。 |
5. 字典遍历
5.1 dict.items() 返回键值对元组
dict.items()方法会返回键值对元组 (k,v) 组成的列表 [(k1,v1),(k2,v2)...]。当使用for循环时
-
如果使用一个变量for item in dict.items()会接收到(k,v)元组
-
如果使用元组变量for k,v in dict.items()可以分别接收到键和值。
>>> d = {'a': 1, 2: 'b'}
>>> for item in d.items():
print(item)
('a', 1)
(2, 'b')
>>> for k,v in d.items():
print("key : %s , value : %s" %(k,v))
key : a , value : 1
key : 2 , value : b
5.1 dict,dict.keys()返回键列表,dict.values()返回值列表
-
dict.keys(),返回键列表对象dict_keys
-
dict.values(),返回值列表对象dict_values
>>> for k in d.keys():
print("key : ",k)
key : a
key : 2
>>> for v in d.values():
print("value : ",v)
value : 1
value : b