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

如何对Python嵌套字典中相同键的值求和?以食品营养数据为例

动态计算嵌套字典中食品属性的总和

你有一组存储食品营养数据的嵌套字典:

bcode_lib = {
    6294001819226: {"Item": "Snickers", "Fat": 6.2, "Energy": 519, "Sugars": 12.4, "Energy-kcal": 124, "Protein": 7, "Carbohydrates": 12.4, "Saturated-fat": 2.5},
    5000159366243: {"Item": "Twix", "Fat": 23.7, "Energy": 2071, "Sugars": 48.8, "Energy-kcal": 495, "Protein": 4.5, "Carbohydrates": 64.6, "Saturated-fat": 13.7},
}

需要计算所有食品的相同属性总和(如总蛋白质、总热量),但字典内容会动态变化,无法通过固定条码键求和。以下是可行的实现方案:

单个属性求和

用sum()结合生成器表达式,遍历所有食品子字典的对应属性,无需依赖固定条码:

# 计算总脂肪
total_fat = sum(item['Fat'] for item in bcode_lib.values())
print(f"Total fat is: {total_fat}")

# 计算总蛋白质
total_protein = sum(item['Protein'] for item in bcode_lib.values())
print(f"Total Protein is: {total_protein}")

bcode_lib.values()会自动获取字典中所有食品的子字典,后续新增或删除条码条目时,代码无需修改即可正常运行。

批量计算所有数值属性总和

如果需要一次性计算所有可求和的营养属性(跳过Item这类字符串属性),可以写一个通用函数:

def calculate_all_totals(food_lib):
    totals = {}
    # 获取第一个食品的属性列表(假设所有食品属性结构一致)
    first_food = next(iter(food_lib.values()))
    for attr in first_food:
        # 仅计算数值类型的属性
        if isinstance(first_food[attr], (int, float)):
            totals[attr] = sum(food[attr] for food in food_lib.values())
    return totals

# 调用函数获取所有属性总和
all_totals = calculate_all_totals(bcode_lib)

# 打印示例结果
print("Total Energy:", all_totals['Energy'])
print("Total Sugars:", all_totals['Sugars'])
print("Total Saturated-fat:", all_totals['Saturated-fat'])

Python中没有bcode_lib[*]['Fat']这类通配符语法,但上述方法完全能满足动态字典的属性求和需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:01:01