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

如何遍历字典并创建新字典以累加同类项的数值?

遍历字典并累加同类项数值的几种方法

嘿,这个问题在日常数据处理里挺常见的,咱们来一步步拆解解决。首先我先假设一个典型的输入场景(毕竟你没给出具体的原始字典结构,但这类需求最常见的情况是下面这样):

比如你有一个包含类别和对应数值的列表(因为标准字典的键是唯一的,所以不会有重复键的情况,更可能是列表嵌套字典的结构):

items = [
    {"category": "apple", "value": 2},
    {"category": "banana", "value": 3},
    {"category": "apple", "value": 1},
    {"category": "orange", "value": 5},
    {"category": "banana", "value": 2}
]

咱们要得到的预期输出是:

{"apple": 3, "banana": 5, "orange": 5}

下面给你几种实用的实现方式:

方法一:基础遍历 + 手动判断(最直观)

这是最容易理解的方式,完全不用依赖额外库:

result = {}
for item in items:
    category = item["category"]
    num = item["value"]
    # 检查类别是否已在结果字典中
    if category in result:
        result[category] += num
    else:
        result[category] = num

print(result)

核心逻辑就是初始化空字典,逐个遍历元素,存在的类别就累加数值,不存在就新增键值对。

方法二:用collections.defaultdict简化代码

Python的标准库collections里的defaultdict可以帮我们省去判断键是否存在的步骤,自动给新键设置默认值:

from collections import defaultdict

result = defaultdict(int)  # 新键默认值为0
for item in items:
    result[item["category"]] += item["value"]

# 如果需要转换成普通字典(可选)
normal_result = dict(result)
print(normal_result)

这种方式代码更简洁,适合处理大规模数据时减少冗余代码。

方法三:用collections.Counter高效处理

Counter是专门用于计数的字典子类,用来做数值累加也非常顺手:

from collections import Counter

counter = Counter()
for item in items:
    counter[item["category"]] += item["value"]

# 转换成普通字典
result = dict(counter)
print(result)

如果你的场景是统计次数(比如同一类别出现的次数),Counter会更方便,这里用来累加数值同样适用。

特殊场景:原始字典的值是列表

如果你的原始数据本身就是字典,且每个键对应的是需要累加的数值列表,比如:

original_dict = {"apple": [2, 1], "banana": [3, 2], "orange": [5]}

那用字典推导式就能一步搞定:

result = {key: sum(values) for key, values in original_dict.items()}
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:42:34