Python字典列表值合并:如何正确合并对应键的列表?
字典对应键的列表合并问题
我有两个值为列表的字典:
n = {'d1': [1, 2, 3], 'd2': ['a', 'b', 'c']} m = {'d1': [4, 5], 'd2': ['d', 'e']}
期望得到的输出是:
{'d1': [1, 2, 3, 4, 5], 'd2': ['a', 'b', 'c', 'd', 'e']}
我尝试了以下代码:
for k in n: for k in m: n[k] += m[k]
但得到了错误的输出:
> print(n) > {'d1': [1, 2, 3, 4, 5, 4, 5], 'd2': ['a', 'b', 'c', 'd', 'e', 'd', 'e']}
错误原因
嵌套两层循环会导致每个键被重复处理两次。外层遍历n的键时,内层又遍历m的所有键,相当于每个n的键都会被追加m中所有键的列表两次,最终出现重复元素。
正确实现方式
方式一:直接修改原字典n
因为两个字典的键完全匹配,只需遍历一次键,将m对应键的列表追加到n的对应列表即可:
n = {'d1': [1, 2, 3], 'd2': ['a', 'b', 'c']} m = {'d1': [4, 5], 'd2': ['d', 'e']} for k in n: n[k] += m[k] print(n)
输出结果:
{'d1': [1, 2, 3, 4, 5], 'd2': ['a', 'b', 'c', 'd', 'e']}
方式二:创建新字典(保留原字典)
如果不想修改原始的n,可以用字典推导式生成新的合并字典:
n = {'d1': [1, 2, 3], 'd2': ['a', 'b', 'c']} m = {'d1': [4, 5], 'd2': ['d', 'e']} merged_dict = {key: n[key] + m[key] for key in n} print(merged_dict)
该方法简洁高效,同时保留了原字典的内容。
方式三:兼容键不匹配的场景
如果两个字典的键可能不完全相同,可以先获取所有键的集合,再合并对应列表(不存在的键用空列表补充):
n = {'d1': [1, 2, 3], 'd2': ['a', 'b', 'c'], 'd3': [7, 8]} m = {'d1': [4, 5], 'd2': ['d', 'e'], 'd4': ['f']} merged_dict = {} all_keys = set(n.keys()).union(m.keys()) for key in all_keys: merged_dict[key] = n.get(key, []) + m.get(key, []) print(merged_dict)
输出结果:
{'d1': [1, 2, 3, 4, 5], 'd2': ['a', 'b', 'c', 'd', 'e'], 'd3': [7, 8], 'd4': ['f']}
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

