我正在try 构建一个简单的排放量计算器.固定燃料消耗的排放系数(对所有用户都是固定的)已被输入一个名为ef_stationary的词典.这三个燃烧来源(不同的用户会有所不同)已经被输入了一本名为warehouse的词典.

我想循环三个燃烧源,并为循环中的每一项,乘以相应的排放因子的燃料消耗量.完成循环后,应将三个计算值相加.在这个特定的例子中,最终的答案应该是1200*70.62 + 2200*61.15 + 800*49.87 = 259,170.

我知道ef_stationary['Propane']将得出丙烷的适当排放系数,warehouse["forklift"]["quantity"]将得出丙烷的使用量.但是,我不确定如何将这两位放在一个循环中,然后对中间结果求和.

我知道有类似的帖子是关于循环和使用Python词典求和的,但没有一个贴近我当前的问题,可以帮助我找到解决方案.

ef_stationary = {
    "Natural Gas": 49.87,
    "Propane": 61.15,
    "Light Fuel Oil": 68.37,
    "Heavy Fuel Oil": 74.74,
    "Kerosene": 68.20,
    "Diesel Fuel": 70.62,
    "Marine Diesel": 68.16,
    "Gasoline": 65.22
}

warehouse = {
    "generator" : {
        "fuel" : "Diesel Fuel",
        "quantity" : 1200
    },
    "forklift" : {
        "fuel" : "Propane",
        "quantity" : 2200
    },
    "furnace" : {
        "fuel" : "Natural Gas",
        "quantity" : 800
    }
}

推荐答案

从数据中可以清楚地看出,ef_stationary是用来查找单价的,而warehouse是用来汇总的.所以你可以遍历warehouse个值,从ef_stationary开始查找燃料价格,然后乘以总燃料价格.

total = 0
for d in warehouse.values():
    fuel_type = d['fuel']
    price = ef_stationary[fuel_type]
    total += price * d['quantity']

也可以使用sum()函数将上述代码编写为一行程序:

total = sum(ef_stationary[d['fuel']] * d['quantity'] for d in warehouse.values())
print(total)  # 259170.0

如果ef_stationary中不存在warehouse中的燃料类型,您可以使用get()来防止这种可能性.在这种情况下,查找词典中不存在的燃料类型将被排除在总计算之外.

total = 0
for d in warehouse.values():
    fuel_type = d['fuel']
    price = ef_stationary.get(fuel_type, 0)  # <--- if fuel type doesn't exist, its price will be zero
    total += price * d['quantity']

Python相关问答推荐

为什么Pydantic在我申报邮箱时说邮箱丢失

带有计数值的Pandas数据帧

Pandas使用过滤器映射多列

将嵌套列表的字典转换为数据框中的行

如何在矩阵上并行化简单循环?

查找下一个值=实际值加上使用极点的50%

如何使用上下文管理器创建类的实例?

如何防止Plotly在输出到PDF时减少行中的点数?

在Python中为变量的缺失值创建虚拟值

LAB中的增强数组

使用plotnine和Python构建地块

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

带条件计算最小值

对于一个给定的数字,找出一个整数的最小和最大可能的和

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

python中字符串的条件替换

使用groupby方法移除公共子字符串

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何在达到end_time时自动将状态字段从1更改为0