Python提供了多种方法可以用来合并字典,以下是其中几种常见的方式。
方法1:使用update()方法
可以使用字典的update()方法将一个字典中的键值对合并到另一个字典中。
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
在上面的例子中,将dict2中的键值对合并到了dict1中。
方法2:使用 ** 运算符
在Python3.5以及之后的版本中,可以使用 ** 运算符来将两个字典合并。
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {**dict1, **dict2}
print(dict3) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
在上面的例子中,将dict1和dict2合并到了dict3中。
方法3:使用ChainMap
可以使用collections模块中的ChainMap来合并多个字典。
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {'e': 5, 'f': 6}
chain = ChainMap(dict1, dict2, dict3)
print(chain) # ChainMap({'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6})
在上面的例子中,将dict1、dict2和dict3合并到了一个ChainMap对象中。ChainMap对象在获取键值对时先从第一个字典中查找,如果没有找到再从第二个字典中查找,以此类推。
使用ChainMap方法有一个好处是可以在不需要合并的情况下对多个字典进行操作。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict3 = {'c': 5, 'd': 6}
chain = ChainMap(dict1, dict2, dict3)
value = chain['b']
print(value) # 2
在上面的例子中,b键在dict1中就已经存在了,所以获取的是dict1中的值。
方法4:使用字典解析式
可以使用字典解析式来将多个字典合并到一个字典中。
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {'e': 5, 'f': 6}
dict4 = {**dict1, **dict2, **dict3}
print(dict4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
在上面的例子中,使用字典解析式将dict1、dict2和dict3合并到了dict4中。
方法5:使用字典copy方法
可以使用字典copy方法将多个字典合并到一个字典中。
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {'e': 5, 'f': 6}
dict4 = dict1.copy()
dict4.update(dict2)
dict4.update(dict3)
print(dict4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
在上面的例子中,使用字典copy方法将dict1合并到dict4中,然后再将dict2、dict3合并到dict4中。
示例1:
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'d': 4, 'e': 5, 'f': 6}
dict3 = {**dict1, **dict2}
print(dict3)
运行上面的代码,可以将dict1和dict2合并后输出,输出结果为:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
示例2:
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 4, 'e': 5, 'f': 6}
dict3 = {'a': 3, 'e': 7, 'f': 8}
chain = ChainMap(dict1, dict2, dict3)
print(chain['b'])
运行上面的代码,可以在ChainMap中查找’b’对应的值,输出结果为:
2
在上面的例子中,’a’在dict1和dict3中都有对应的值,而’b’在dict1和dict2中都有对应的值,所以获取的是dict1和dict2中的值。