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

如何用最Pythonic的方法对字典列表中匹配键的值求和?

对字典列表中匹配键的值求和的Pythonic实现方法

嘿,你的问题问得很到位!要实现字典列表里各对应键的值累加,确实有比嵌套循环更贴合Python风格的写法,我给你分享几种实用方案:

方案一:用collections.Counter(最推荐)

Counter本身就是标准库为计数/累加场景量身打造的工具,比defaultdict更适配这个需求,代码简洁还语义明确:

from collections import Counter
from itertools import chain

# 写法1:循环更新Counter,可读性拉满
demandresult = Counter()
for d in demandlist:
    demandresult.update(d)

# 写法2:更紧凑的一行式(利用迭代器展开所有键值对)
demandresult = Counter(chain.from_iterable(d.items() for d in demandlist))

chain.from_iterable会把所有字典的键值对扁平化成一个连续的迭代器,Counter会自动帮我们完成每个键的数值累加,非常省心。

方案二:纯推导式实现

如果你偏好完全用推导式的写法,也可以先收集所有唯一键,再对每个键遍历所有字典求和:

# 先获取所有字典里的唯一键集合
all_keys = {key for dic in demandlist for key in dic}
# 字典推导式完成累加,用get避免KeyError
demandresult = {key: sum(dic.get(key, 0) for dic in demandlist) for key in all_keys}

这里用dic.get(key, 0)是为了处理某些字典没有对应键的情况,如果能确定所有字典都包含相同的键,也可以直接用dic[key]。

对比你原有的代码

你用defaultdict的写法其实已经很清晰易懂了,只是Counter在这个场景下更贴合Python"用合适的工具做合适的事"的理念,代码更简洁。如果你的业务场景里需要频繁做这类累加操作,Counter会是更好的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:45