Python中合并两个字典有很多种方法,下面分别介绍9种方法的完整攻略。
方法1:使用{dict1, dict2}方式合并
优点
- 代码简单明了
缺点
- 如果两个字典内有相同key,后者会覆盖前者
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {**dict1, **dict2}
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法2:使用dict1.update(dict2)方式合并
优点
- 可以对原字典进行修改
- 字典内key相同时,不会出现覆盖的情况
缺点
- 需要创建一个新字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = dict1.copy() # 复制字典1
dict3.update(dict2) # 用字典2更新字典3
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法3:使用collections.ChainMap()方式合并
优点
- 无需创建新字典
- 可以直接操作原字典
缺点
- 字典内key相同时,后者会覆盖前者
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = ChainMap(dict1, dict2)
print(dict3) # 输出结果:ChainMap({'a': 1, 'b': 2}, {'c': 3, 'd': 4})
方法4:使用字典推导式方式合并
优点
- 代码简洁
- 可以自定义合并规则
缺点
- 需要创建新字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {key: value for d in (dict1, dict2) for key, value in d.items()}
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法5:使用字典解析式方式合并
优点
- 可以自定义合并规则
缺点
- 需要创建新字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = {**dict1, **dict2}
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法6:使用zip()函数和字典构造器方式合并
优点
- 可以自定义合并规则
缺点
- 需要创建新字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = dict(zip(dict1.keys() | dict2.keys(), dict1.values() | dict2.values()))
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法7:使用setdefault()方法方式合并
优点
- 简单易懂
- 不需要创建新字典
缺点
- 字典内key相同时,后者会覆盖前者
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
for key, value in dict2.items():
dict1.setdefault(key, value)
print(dict1) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
方法8:使用collections.defaultdict()方式合并
优点
- 无需手动判断key是否存在
- 可以自定义合并规则
缺点
- 需要创建新字典
from collections import defaultdict
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict3 = defaultdict(list)
for d in (dict1, dict2):
for key, value in d.items():
dict3[key].append(value)
print(dict(dict3)) # 输出结果:{'a': [1], 'b': [2], 'c': [3], 'd': [4]}
方法9:使用pandas库merge()方法合并
优点
- 不仅可以合并字典,还可以合并列表、DataFrame等
- 可以根据指定key进行合并
缺点
- 需要安装pandas库
- 需要将字典转化为pandas格式
import pandas as pd
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
df1 = pd.DataFrame([[key, value] for key, value in dict1.items()], columns=['key', 'value'])
df2 = pd.DataFrame([[key, value] for key, value in dict2.items()], columns=['key', 'value'])
df3 = pd.merge(df1, df2, on='key', how='outer').fillna('')
dict3 = {key: value for key, value in df3.values}
print(dict3) # 输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
以上就是Python合并2个字典成1个新字典的9种方法的完整攻略,你可以根据自己的需求选择适合自己的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python合并2个字典成1个新字典的方法(9种) - Python技术站