2023-02-09 16:25:58
在 Python 中合并字典时,核心在于处理重复键的值。以下是具体方法及重复键处理策略的总结:

update() 方法
特点:直接修改原始字典,将另一个字典的键值对添加到其中。若存在重复键,后者的值会覆盖前者。
适用场景:需要修改原始字典时使用。
示例:
dict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4}dict1.update(dict2)print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}运算符(Python 3.5+)
特点:创建新字典,不修改原始字典。重复键的处理方式与 update() 相同(后者覆盖前者)。
适用场景:需保留原始字典且使用 Python 3.5 及以上版本时。
示例:
dict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4}merged_dict = {dict1, dict2}print(merged_dict) # 输出: {'a': 1, 'b': 3, 'c': 4}| 运算符(Python 3.9+)
特点:与 运算符功能相同,但语法更简洁,同样生成新字典。
适用场景:使用 Python 3.9 及以上版本时推荐。
示例:
dict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4}merged_dict = dict1 | dict2print(merged_dict) # 输出: {'a': 1, 'b': 3, 'c': 4}手动循环合并
特点:通过遍历字典实现精细控制,可自定义重复键的处理逻辑(如值相加、保留首个值等)。
适用场景:需对重复键执行特定操作时。
示例(值相加):
dict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4}merged_dict = dict1.copy()for key, value in dict2.items(): if key in merged_dict: merged_dict[key] += value # 重复键的值相加 else: merged_dict[key] = valueprint(merged_dict) # 输出: {'a': 1, 'b': 5, 'c': 4}建议:
除覆盖外,可根据需求选择以下策略:
保留首个值
在手动循环中跳过已存在的键:
merged_dict = dict1.copy()for key, value in dict2.items(): if key not in merged_dict: # 仅添加新键 merged_dict[key] = value存储为列表
将重复键的值收集到列表中:
from collections import defaultdictmerged_dict = defaultdict(list)for d in [dict1, dict2]: for key, value in d.items(): merged_dict[key].append(value)print(dict(merged_dict)) # 输出: {'a': [1], 'b': [2, 3], 'c': [4]}自定义函数处理
定义函数处理重复键的逻辑(如求平均值、最大值等):
def merge_strategy(key, old_val, new_val): return (old_val + new_val) / 2 # 示例:求平均值merged_dict = dict1.copy()for key, value in dict2.items(): if key in merged_dict: merged_dict[key] = merge_strategy(key, merged_dict[key], value) else: merged_dict[key] = valuePython 3.9+:用 | 运算符。
旧版本:用 运算符。
根据具体需求(如是否修改原字典、Python 版本、重复键处理逻辑)选择合适方法即可。