我有兩個字典具有相同的密鑰,我想對值進行除法更新或創建一個新的字典,保持密鑰不變,以商爲新值每個鍵。劃分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 }
除了通過鍵,值對迭代和創造價值的有序列表,然後分,我不知道如何做到這一點。我希望有一個更優雅的解決方案。
我有兩個字典具有相同的密鑰,我想對值進行除法更新或創建一個新的字典,保持密鑰不變,以商爲新值每個鍵。劃分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 }
除了通過鍵,值對迭代和創造價值的有序列表,然後分,我不知道如何做到這一點。我希望有一個更優雅的解決方案。
使用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)
它生成一個鍵值元組序列。
這適用於所有的蟒蛇,我會建議但通過@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}
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}
+1從來不知道它適用於字典! – SuperSaiyan 2012-08-07 06:10:19
@Thrustmaster:它被稱爲dict理解;在Python 2.7中引入:[PEP 274](http://www.python.org/dev/peps/pep-0274/)。 – 2012-08-07 06:12:45
@MartijnPieters:太棒了!謝謝:) – SuperSaiyan 2012-08-07 06:14:22
3.2中使用。 keys()方法和.get(key)。 http://www.tutorialspoint.com/python/python_dictionary.htm
'.get(key)'如果沒有定義鍵,則返回None。雖然它總是會循環使用'.keys()',這確實意味着'.get(key)'比普通的項訪問('d1 [key]')慢。 – 2012-08-07 06:10:59
這也適用於Python 2 – jamylak 2012-08-07 06:11:20
關鍵路口是沒有必要的,OP指出2個字母具有相同的鍵 – jamylak 2012-08-07 06:05:57
@jamylak:比對不起更安全嗎? :-P – 2012-08-07 06:08:16
@MartijinPieters你是對的! – jamylak 2012-08-07 06:18:22