2016-04-30 75 views
1

我的代碼例如如下在字典更換字典的值作爲總值的比率

dict1 = {'c': 2, 'p': 1.0}  

要改變的字典的值來表示其自身的比率出合計值的

dict1 = {'c': 0.6666666666666666, 'p': 0.3333333333333333} 
+1

不是Python專家,但你可以得到值的數組,然後求和它們,然後用計算的總和除以每個條目(值)。 –

回答

1
>>> d = {'c': 2, 'p': 1.0}              
>>> d1 = { k: d[k]/sum(d[k] for k in d) for k in d } 
>>> d1 
{'c': 0.6666666666666666, 'p': 0.3333333333333333} 
>>> 

注意:避免使用dict作爲變量名,它是一個python's builtin。一襯墊的

說明:

  • d1 = {} - > d1爲一個字典

  • d1 = { k: ... for k in d} - >的d1所有鍵的d

  • sum(d[k] for k in d)的那些 - >計算所有d的值之和

因此,上面的...部分包含d[k]/sum(d[k] for k in d):這會使與所有值d的總和匹配的密鑰k的值的商數。

編輯:作爲alykhank建議在評論中,可以做到這兩行,並通過不重新計算每次迭代的總和來節省執行時間。

>>> total = sum(d.values()) 
>>> d2 = {k: d[k]/total for k in d} 
>>> d2 
{'c': 0.6666666666666666, 'p': 0.3333333333333333} 
>>> 
+1

我建議保存總數,以避免在每次迭代中重新計算它:'total = sum(d.values())'then then'd1 = {k:d [k]/total for k in d}'。 – alykhank