在Python中计算两个dict之间的值

在Python中计算两个dict之间的值,python,dictionary,Python,Dictionary,我在python中有两个dict,一个是数量,另一个是价格,它们都有相同的键 计算目录中每个元素的数量*价格的最佳快速方法是什么 范例 prices = {'a': '40', 'b': '40', 'c': '35'} data ={'a': '1', 'b': '2', 'c': '4'} 我想得到260的总和(int)您可以在生成器表达式上使用sum,如下所示: sum(float(v)*float(prices[k])对于数据中的k,v.iteritems())自然地,数据应该是整数,

我在python中有两个dict,一个是数量,另一个是价格,它们都有相同的键 计算目录中每个元素的数量*价格的最佳快速方法是什么

范例

prices = {'a': '40', 'b': '40', 'c': '35'}
data ={'a': '1', 'b': '2', 'c': '4'}

我想得到260的总和(int)

您可以在生成器表达式上使用
sum
,如下所示:


sum(float(v)*float(prices[k])对于数据中的k,v.iteritems())

自然地,数据应该是整数,以避免转换的需要。对于并非购买prices中的每个元素的更一般情况,这将中断。i、 例如,循环在数据上比在价格上更有意义。@wim在zip(data.values(),prices.values())中,a和b的
sum(int(a)*int(b)如何
为什么循环在
价格上而不是
数据上呢?如果
data
缺少
prices
包含的条目,该怎么办?现在您假设dict是按相应的顺序排序的,甚至更糟
sum(float(v)*float(prices.get(k,0))表示数据中的k,v,v.items())
?我更希望在这种情况下提出一个例外,因为我们对某个项目没有价格,而不是假设它是免费的。确实如此。我删除我的建议不是为了让你的评论可以理解,而是+1
>>> prices = {'a': '40', 'b': '40', 'c': '35'}
>>> data ={'a': '1', 'b': '2', 'c': '4'}
>>> sum(int(prices[x])*int(data[x]) for x in data)
260