2016-04-30 85 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