在python中划分两个字典的值

时间:2012-08-07 06:01:40

标签: python dictionary division

我有两个具有相同键的字典,我想对值进行除法更新或创建新字典,保持键完好无损,并将商作为每个键的新值。

d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3 = d2 / d1

d3 = { 'a':0 , 'b':0.5 , 'c':1 }

除了遍历键,值对和创建值的有序列表,然后划分,我不知道如何做到这一点。我希望有一个更优雅的解决方案。

4 个答案:

答案 0 :(得分:16)

使用viewkeys(python2.7):

{k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2}

在python 3中也是如此(我们可以完全放弃float()调用):

{k: d2[k]/d1[k] for k in d1.keys() & d2}

是的,我在这里使用了一个关键的交叉点;如果您完全确定两者中的密钥相同,只需使用d2

{k: float(d2[k])/d1[k] for k in d2}

要完成,在Python 2.6中,你必须使用带有生成器表达式的dict()构造函数来实现相同的目标:

dict((k, float(d2[k])/d1[k]) for k in d2)

生成一系列键值元组。

答案 1 :(得分:6)

这适用于所有蟒蛇,但如果有Py 2.7 +

我会推荐@MartijnPieters的解决方案
>>> d1 = { 'a':12 , 'b':10 , 'c':2 }
>>> d2 = { 'a':0 , 'c':2 , 'b':5}
>>> d3 = dict((k, float(d2[k]) / d1[k]) for k in d2)
>>> d3
{'a': 0.0, 'c': 1.0, 'b': 0.5}

答案 2 :(得分:5)

d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3={x:float(d2[x])/d1[x] for x in d1}
print d3

<强>输出:

{'a': 0.0, 'c': 1.0, 'b': 0.5}

答案 3 :(得分:1)

3.2中的

使用.keys()方法和.get(键)。 http://www.tutorialspoint.com/python/python_dictionary.htm