创建dict的方法

1、使用dict()将列表或二元组构列表造成字典(此种方法也可和列表推导式结合)

  1. s = dict([['name', 'anna'], ['age', 18]])
  2. s = dict([('name', 'anna'), ('age', 18)])

2、创建空字典/直接赋值创建

  1. dic = {}
  2. dic = {'spam': 1, 'egg': 2}

3、通过字典推导式

  1. dic = {i: 2*i for i in range(3)}

4、dict()和zip()结合

  1. dic = dict(zip('abc', [1, 2, 3]))

5、通过关键字dict和关键字参数创建

  1. dic = dict(spam = 1, egg = 2, bar =3)

dict1.update(dict2)

可用来合并两个字典(如果键已经存在,则被覆盖)

  • 可使用一个字典所包含的键值对来更新己有的字典。
  • 在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。

    1. a = {'one': 1, 'two': 2, 'three': 3}
    2. a.update({'one':4.5, 'four': 9.3})
    3. print(a)
    4. # {'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}

    setdefault()

    如果键不存在于字典中,将会添加键并将值设为默认值。

    1. dict.setdefault(key, default=None)

    dict.contains(key)

    字典是否存在某个键。

    1. dict = {'Name':'coco','Sex':'Female'} # 定义字典
    2. print(dict.__contains__('Name')) # True
    1. d = dict()
    2. if x in d:

    常见的坑

  • 将字典或字典的部分赋值给另一个变量,如果修改了另一个变量,则原字典也会被修改!

  • 因此如果想复制一个字典,dict.copy()还不够,要用深拷贝,这样对复制后字典的修改才不会影响原字典。
    1. import copy
    2. dict1 = {}
    3. dict2 = copy.deepcopy(dict1)

    和C++ map的不同之处

    C++比如map<char,int> mp,那么mp[‘a’]则会自动创建一个键,默认值为0。 ```cpp // C++ map mp; 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 // 可以正常运行了。 ```