Python中如何遍历元组并按键汇总数值到字典
解决字典重复键数值汇总的问题
首先得明确:Python的字典不允许存在重复键,你写的期望输出里出现两个'Rent'是不符合字典规则的,正确的需求应该是把相同键对应的数值累加,最终得到每个键对应汇总后的结果。
假设你的元组结构
先假设从数据库拿到的元组是这种键值对形式:
db_tuple = (('Rent', -100.0), ('Groceries', -20.0), ('Rent', -64.0), ('Other', -3.3), ('Bills', -18.0))
方案1:手动遍历累加
初始化空字典,逐个处理元组里的键值对,存在的键就累加数值,不存在就直接赋值:
result = {} for key, value in db_tuple: if key in result: result[key] += value else: result[key] = value
运行后得到的结果是:
{'Rent': -164.0, 'Groceries': -20.0, 'Other': -3.3, 'Bills': -18.0}
方案2:用collections.defaultdict简化代码
借助标准库的defaultdict,可以省去判断键是否存在的步骤,直接累加:
from collections import defaultdict result = defaultdict(float) for key, value in db_tuple: result[key] += value # 可选:转成普通字典 result = dict(result)
为什么常规dict()不行?
字典的键是唯一的,当你用dict(db_tuple)转换时,后面出现的重复键会直接覆盖之前的,所以最终只会保留每个键的最后一个对应值,这就是你遇到的“其余值被忽略”的原因。
内容的提问来源于stack exchange,提问作者Nicholas Coetzee
相关产品推荐
相关产品推荐

