在python中划分两个字典的值

ktf*_*ghm 8 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 }
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 17

使用viewkeys(python2.7):

{k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2}
Run Code Online (Sandbox Code Playgroud)

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

{k: d2[k]/d1[k] for k in d1.keys() & d2}
Run Code Online (Sandbox Code Playgroud)

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

{k: float(d2[k])/d1[k] for k in d2}
Run Code Online (Sandbox Code Playgroud)

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

dict((k, float(d2[k])/d1[k]) for k in d2)
Run Code Online (Sandbox Code Playgroud)

它生成一系列键值元组.


jam*_*lak 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}
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 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
Run Code Online (Sandbox Code Playgroud)

输出:

{'a': 0.0, 'c': 1.0, 'b': 0.5}
Run Code Online (Sandbox Code Playgroud)

  • @Thrustmaster:它被称为dict理解; 在python 2.7中引入:[PEP 274](http://www.python.org/dev/peps/pep-0274/). (2认同)