如何遍历字典并创建新字典以累加同类项的数值?
遍历字典并累加同类项数值的几种方法
嘿,这个问题在日常数据处理里挺常见的,咱们来一步步拆解解决。首先我先假设一个典型的输入场景(毕竟你没给出具体的原始字典结构,但这类需求最常见的情况是下面这样):
比如你有一个包含类别和对应数值的列表(因为标准字典的键是唯一的,所以不会有重复键的情况,更可能是列表嵌套字典的结构):
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
相关产品推荐
相关产品推荐

