Python中合并多个同键字典列表值的高效Pythonic实现方法
合并多字典同键列表值的最优实现
简洁Python风格实现(适用于键完全一致的场景)
利用字典推导结合sum快速合并列表:
dict_1 = {"a": ["1"], "b": ["3"]} dict_2 = {"a": ["2"], "b": ["3"]} dicts = [dict_1, dict_2] new_dict = {key: sum((d[key] for d in dicts), []) for key in dicts[0]}
注:sum(..., [])通过累加操作把多个列表依次合并,字典推导批量处理所有键对应的列表。
高性能实现(大数量/大列表场景)
用itertools.chain避免sum的中间列表开销,内存占用更低、速度更快:
from itertools import chain new_dict = {key: list(chain.from_iterable(d[key] for d in dicts)) for key in dicts[0]}
通用兼容实现(支持键不完全一致的情况)
如果后续可能出现键不匹配的场景,defaultdict是更稳妥的选择:
from collections import defaultdict new_dict = defaultdict(list) for d in dicts: for key, val in d.items(): new_dict[key].extend(val) # 若需转为普通字典:new_dict = dict(new_dict)
关于{**dict_1, **dict_2}失效的原因
这个语法是覆盖式合并,后面字典的键值对会直接替换前面的,因此只会保留最后一个字典的列表值,无法实现列表合并。
内容的提问来源于stack exchange,提问作者Paul-ET
相关产品推荐
相关产品推荐

