你怎么把不总结为1的概率变成那些呢?

时间:2017-02-12 20:46:43

标签: python python-3.x

如果您不知道密钥的数量和密钥的名称,如何将不等于1的概率转换为总和为1的概率? 例如:

a = {'g' = 0.1, 'b' = 0.05, 'u' = 0.15, 'i' = 0.2}

要:

a = {'g' = 0.2, 'b' = 0.1, 'u' = 0.3, 'i' = 0.4}

2 个答案:

答案 0 :(得分:5)

您打算做的事情称为规范化:您计算sum并将所有元素除以该总和:

total_inv = 1.0/sum(a.values())
for key,val in a.items():
    a[key] = val*total_inv

甚至更短(如@Jean-FrançoisFabre所说)使用 dict comprehension

total_inv = 1.0/sum(a.values())
a = {k:v*total_inv for k,v in a.items()}

但这将构建一个新词典,因此不会更新对旧词典的引用。

在代码中我们计算1.0/sum(..),因为除法通常比乘法更昂贵,因此可以获得一定的效率。

答案 1 :(得分:1)

关于制作词典here的答案,这应该可以解决您的问题:

a = {'g':0.1, 'b': 0.05, 'u':0.15, 'i': 0.2}
total = sum(a.values())
new_dict = dict((key, value/total) for (key, value) in a.items())