创建dict的方法
1、使用dict()将列表或二元组构列表造成字典(此种方法也可和列表推导式结合)
s = dict([['name', 'anna'], ['age', 18]])
s = dict([('name', 'anna'), ('age', 18)])
2、创建空字典/直接赋值创建
dic = {}
dic = {'spam': 1, 'egg': 2}
3、通过字典推导式
dic = {i: 2*i for i in range(3)}
4、dict()和zip()结合
dic = dict(zip('abc', [1, 2, 3]))
5、通过关键字dict和关键字参数创建
dic = dict(spam = 1, egg = 2, bar =3)
dict1.update(dict2)
可用来合并两个字典(如果键已经存在,则被覆盖)
- 可使用一个字典所包含的键值对来更新己有的字典。
在执行 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}
setdefault()
如果键不存在于字典中,将会添加键并将值设为默认值。
dict.setdefault(key, default=None)
dict.contains(key)
字典是否存在某个键。
dict = {'Name':'coco','Sex':'Female'} # 定义字典
print(dict.__contains__('Name')) # True
d = dict()
if x in d:
常见的坑
将字典或字典的部分赋值给另一个变量,如果修改了另一个变量,则原字典也会被修改!
- 因此如果想复制一个字典,dict.copy()还不够,要用深拷贝,这样对复制后字典的修改才不会影响原字典。
import copy
dict1 = {}
dict2 = copy.deepcopy(dict1)
和C++ map的不同之处
C++比如map<char,int> mp
,那么mp[‘a’]则会自动创建一个键,默认值为0。 ```cpp // C++ mapmp; mp[‘a’] += 1; // 可以正常运行,因为c++访问mp[‘a’]时会默认创建一个键值对,值为0。
// python mp = dict() mp[‘a’] += 1 // 不可以正常运行,要先python要先创建’a’这个key,执行mp[‘a’]=1后,才能执行这句,没有值为0的默认。 // 但python可以通过如下方式实现给键默认值0. from collections import defaultdict mp = defaultdict(int) mp[‘a’] += 1 // 可以正常运行了。 ```