在Python中计算两个字典之间的值

3
我在Python中有两个字典,一个是数量,另一个是价格,它们都有相同的键。最好且快速的方法是什么,可以计算每个元素的数量乘以价格?
例如:
prices = {'a': '40', 'b': '40', 'c': '35'}
data ={'a': '1', 'b': '2', 'c': '4'}

我想要得到260的总和(整型)

2个回答

2
你可以像这样在生成器表达式上使用sumsum(float(v)*float(prices[k]) for k,v in data.iteritems())

对于data字典中的每个键值对k,v,计算float(v)*float(prices.get(k, 0))的和。 - Pierre GM
1
我更喜欢在没有商品价格的情况下引发异常,而不是假设它是免费的。 - wim
确实。我不会删除我的建议,以便您的评论仍然可以理解,但+1。 - Pierre GM

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

自然地,数据应该是整数,以避免需要进行转换。 - michel-slm
这将无法处理未购买 prices 中每个元素的更一般情况。即,循环遍历数据而不是价格更有意义。 - wim
@wim,对于sum(int(a)*int(b) for a,b in zip(data.values(),prices.values()))这段代码怎么看? - Ashwini Chaudhary
为什么要循环遍历prices而不是data?如果data缺少prices包含的条目会怎样? - jedwards
现在你假设字典按照相应的顺序排序,这甚至更糟糕! - wim
@wim,啊!是的,你说得对,它不知何故给出了正确的解决方案。它肯定很糟糕。 - Ashwini Chaudhary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接