在Python中合并两个字典主要有以下四种方法,具体选择取决于需求(如是否覆盖重复键、是否需要新字典等):
一、使用 update()
方法
直接修改目标字典,覆盖重复键并添加新键值对。适用于原地更新字典的场景。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}
二、使用字典解包运算符 **
创建一个新字典,重复键会被后面的字典值覆盖。适用于需要保留原字典的场景。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = { **dict1, ** dict2}
print(merged) # 输出: {'a': 1, 'b': 3, 'c': 4}
三、使用 |
运算符(Python 3.9+)
创建一个新字典,重复键会被后面的字典值覆盖。适用于Python 3.9及以上版本,语法更简洁。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2
print(merged) # 输出: {'a': 1, 'b': 3, 'c': 4}
四、使用 ChainMap
(需谨慎)
创建一个视图对象,重复键会被后面的字典值覆盖,但不会修改原始字典。适用于需要保留原字典的场景。
from collections import ChainMap
dict1 = {'a': 1}
dict2 = {'a': 2}
merged = ChainMap(dict1, dict2)
print(merged['a']) # 输出: 2
merged['a'] = 3
print(dict1) # 输出: {'a': 3}
五、深度合并(进阶技巧)
对于嵌套字典,需自定义函数实现深度合并(浅合并无法满足需求)。
def deep_merge(dict1, dict2):
result = dict1.copy()
for key, value in dict2.items():
if isinstance(value, dict) and key in result and isinstance(result[key], dict):
result[key] = deep_merge(result[key], value)
else:
result[key] = value
return result
dict1 = {'a': 1, 'b': {'x': 10, 'y': 20}}
dict2 = {'b': {'y': 30, 'z': 40}, 'c': 4}
merged = deep_merge(dict1, dict2)
print(merged) # 输出: {'a': 1, 'b': {'x': 10, 'y': 30}, 'c': 4}
总结 :若需原地修改字典,优先使用 update()
;若需新字典且Python版本≥3.9,推荐使用 |
运算符;其他方法适用于特定场景(如保留原字典、深度合并等)。