You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python字典特定键值(amount)求和报错,求高效实现方案

嘿,我来帮你搞定这个报错问题!

你触发的TypeError: 'int' object is not iterable其实很好理解:sum()函数要求传入一个可迭代对象(比如列表、生成器、元组这类能逐个取元素的东西),但你代码里的v['amount']是个单个整数,直接丢给sum,它自然不知道怎么“迭代”这个整数,就报错了。

接下来分两种常见场景给你高效的实现方式:

场景1:按键分组,计算每组的amount总和

如果你的school字典是每个键对应一个列表,列表里是多个带amount字段的字典(这是很常见的分组存储场景),比如:

school = {
    'math_class': [{'amount': 25}, {'amount': 35}, {'amount': 40}],
    'english_class': [{'amount': 50}, {'amount': 60}]
}

那正确的字典推导式应该这么写:

grouped_sum = {k: sum(item['amount'] for item in v) for k, v in school.items()}

这里用生成器表达式item['amount'] for item in v遍历每组里的所有字典,逐个取出amount值,再用sum()求和——生成器表达式比列表推导式更省内存,大数据量下效率更高。

场景2:计算整个字典里所有amount的总总和

如果你的school字典是每个键对应单个带amount字段的字典,比如:

school = {
    'student_001': {'amount': 120},
    'student_002': {'amount': 180},
    'student_003': {'amount': 200}
}

那直接用一行生成器求和就够了:

total_sum = sum(v['amount'] for v in school.values())

额外小技巧:兼容混合结构

如果你的字典里既有单个字典值,又有列表值,那可以加个简单的判断来兼容:

total_sum = 0
for value in school.values():
    if isinstance(value, list):
        total_sum += sum(item['amount'] for item in value)
    elif isinstance(value, dict) and 'amount' in value:
        total_sum += value['amount']

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

火山引擎 最新活动