You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅地将键相同且值为列表的字典列表合并为单个字典

这题我熟!这种批量合并字典、合并同键列表的需求太常见了,给你整几个优雅的实现方案,按需pick~

方法一:用collections.defaultdict(直观易懂,新手友好)

这个方法逻辑最清晰,不用纠结键是否存在的问题,defaultdict会自动为新键创建空列表:

from collections import defaultdict

# 你的输入字典列表
dict_list = [ {'x': ['a', 'b'], 'y': ['c', 'd']}, {'x': ['e', 'f'], 'y': ['g', 'h']} ]

merged = defaultdict(list)
for d in dict_list:
    for key, values in d.items():
        merged[key].extend(values)

# 可选:如果需要转成普通字典(不是必须的,defaultdict本身也能用)
merged_dict = dict(merged)
print(merged_dict)
# 输出: {'x': ['a', 'b', 'e', 'f'], 'y': ['c', 'd', 'g', 'h']}

这种方式的好处是可读性拉满,后续维护代码的人一眼就能看懂逻辑,适合团队协作或者需要清晰代码的场景。


方法二:字典推导式+itertools.chain(简洁紧凑,一行搞定)

如果你喜欢简洁的代码,且题目已经保证所有字典键相同,那这个方法绝对适合你:

from itertools import chain

dict_list = [ {'x': ['a', 'b'], 'y': ['c', 'd']}, {'x': ['e', 'f'], 'y': ['g', 'h']} ]

merged_dict = {
    key: list(chain.from_iterable(d[key] for d in dict_list)) 
    for key in dict_list[0]
}

print(merged_dict)
# 输出: {'x': ['a', 'b', 'e', 'f'], 'y': ['c', 'd', 'g', 'h']}

chain.from_iterable会把所有同键的列表扁平化成一个迭代器,再转成列表,代码非常紧凑,适合熟悉Python高级特性的同学用。


方法三:functools.reduce(函数式编程风格)

如果你偏爱函数式编程的写法,用reduce来逐步合并字典也很优雅:

from functools import reduce

def merge_two_dicts(a, b):
    # 因为所有字典键相同,直接遍历a的键就行
    for key in a:
        a[key].extend(b[key])
    return a

dict_list = [ {'x': ['a', 'b'], 'y': ['c', 'd']}, {'x': ['e', 'f'], 'y': ['g', 'h']} ]
merged_dict = reduce(merge_two_dicts, dict_list)

print(merged_dict)
# 输出: {'x': ['a', 'b', 'e', 'f'], 'y': ['c', 'd', 'g', 'h']}

reduce会把字典列表里的元素逐个传入合并函数,一步步把所有字典合并成一个,很符合函数式编程的思路。


内容的提问来源于stack exchange,提问作者goedwig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:59:08