📅  最后修改于: 2023-12-03 14:52:49.433000             🧑  作者: Mango
有时候我们可能需要将两个具有相同键的字典合并成一个,而其中一个字典可能含有另一个字典所不包含的键值对,或者两个字典中有相同的键但是对应的值不同,我们需要按照一定的规则进行合并操作。
Python自带的字典数据类型自带了update()方法,可以将一个字典合并到另一个字典中,如果有相同的键,后面的键值将会覆盖前面的键值,代码如下:
dict1 = {"name": "Tom", "age": 18, "gender": "male"}
dict2 = {"age": 20, "score": 80}
dict1.update(dict2)
print(dict1)
输出结果为:
{"name": "Tom", "age": 20, "gender": "male", "score": 80}
其中dict2中的键"age"的值覆盖了dict1中的值"age":18,其他键值按照原来的顺序合并到了dict1中。
要想保留两个字典中的相同键的值,我们可以使用collections模块中的ChainMap()函数,代码如下:
import collections
dict1 = {"name": "Tom", "age": 18, "gender": "male"}
dict2 = {"age": 20, "score": 80}
result = collections.ChainMap(dict1, dict2)
print(result)
输出结果为:
ChainMap({'name': 'Tom', 'age': 18, 'gender': 'male'}, {'age': 20, 'score': 80})
此时,ChainMap中的键值对是按照dict1和dict2的顺序生成的,如果键相同,则会取第一个字典中的键值对。
我们也可以使用字典推导式的方式实现字典合并,代码如下:
dict1 = {"name": "Tom", "age": 18, "gender": "male"}
dict2 = {"age": 20, "score": 80}
result = {**dict1, **dict2}
print(result)
输出结果为:
{"name": "Tom", "age": 20, "gender": "male", "score": 80}
其中的双星号 ** 是Python 3.x新增的运算符,可以将字典打包为关键字参数传递给函数或字典的合并操作。
以上三种方式都可以实现字典合并的功能,具体使用哪个方式取决于实际需求和个人喜好。