2012-08-07 62 views
8

我有兩個字典具有相同的密鑰,我想對值進行除法更新或創建一個新的字典,保持密鑰不變,以商爲新值每個鍵。劃分python中的兩個字典的值

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 } 

除了通過鍵,值對迭代和創造價值的有序列表,然後分,我不知道如何做到這一點。我希望有一個更優雅的解決方案。

回答

13

使用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) 

它生成一個鍵值元組序列。

+0

關鍵路口是沒有必要的,OP指出2個字母具有相同的鍵 – jamylak 2012-08-07 06:05:57

+0

@jamylak:比對不起更安全嗎? :-P – 2012-08-07 06:08:16

+0

@MartijinPieters你是對的! – jamylak 2012-08-07 06:18:22

5

這適用於所有的蟒蛇,我會建議但通過@MartijnPieters解決辦法,如果有PY 2.7+

>>> 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} 
4
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} 
+0

+1從來不知道它適用於字典! – SuperSaiyan 2012-08-07 06:10:19

+2

@Thrustmaster:它被稱爲dict理解;在Python 2.7中引入:[PEP 274](http://www.python.org/dev/peps/pep-0274/)。 – 2012-08-07 06:12:45

+0

@MartijnPieters:太棒了!謝謝:) – SuperSaiyan 2012-08-07 06:14:22