如何合并3个以上含重复键的字典?Python技术问询
合并多个字典并拼接相同键的列表值
问题场景
现有多个字典,每个字典的键对应列表类型的值,需要将这些字典合并,相同键对应的列表按顺序拼接,最终得到一个整合后的字典。
示例输入:
dic1 = {'celia': [14, 3]} dic2 = {'celia': [12, 9], 'pierre': [34, 12]} dic3 = {'celia': [10, 11], 'gustav': [22]} dic4 = {'pierre': [9, 21]}
期望输出:
{'celia': [14, 3, 12, 9, 10, 11], 'pierre': [34, 12, 9, 21], 'gustav': [22]}
解决方案
1. 基础循环实现
无需依赖额外模块,手动遍历所有字典和键值对,处理列表拼接:
merged_dict = {} # 遍历所有待合并的字典 for d in [dic1, dic2, dic3, dic4]: for key, values in d.items(): if key in merged_dict: # 键已存在,扩展现有列表 merged_dict[key].extend(values) else: # 键不存在,复制列表存入新字典(避免原字典修改影响结果) merged_dict[key] = values.copy() print(merged_dict)
2. 使用collections.defaultdict简化代码
借助defaultdict自动处理不存在的键,代码更简洁:
from collections import defaultdict merged_dict = defaultdict(list) for d in [dic1, dic2, dic3, dic4]: for key, values in d.items(): merged_dict[key].extend(values) # 若需要转为普通字典,执行dict(merged_dict) print(dict(merged_dict))
3. 函数式风格:用functools.reduce合并
适合喜欢函数式编程的场景,通过reduce迭代合并字典:
from functools import reduce def merge_two_dicts(a, b): for key, values in b.items(): if key in a: a[key].extend(values) else: a[key] = values.copy() return a merged_dict = reduce(merge_two_dicts, [dic1, dic2, dic3, dic4], {}) print(merged_dict)
内容的提问来源于stack exchange,提问作者gustavjaune
相关产品推荐
相关产品推荐

