首页 > 解决方案 > 将所有字典值转换为比例

问题描述

我已将字典定义为

coocurences = {('a', 'b'): 74, ('a', 'c'): 33, ('b', 'c'): 26}

我想将此字典的值更改为其值之和的比例:

{('a', 'b'): 0,556390977443609‬, ('a', 'c'): 0,2481203007518797, ('b', 'c'): 0,1954887218045113‬‬}

我尝试过:

for x in coocurences.values():
    x = (x/sum(coocurences.values()))

但它告诉我: TypeError: 'builtin_function_or_method' object is not iterable。任何建议如何做到这一点?

标签: pythonpython-3.xdictionary

解决方案


您提供的代码存在几个问题:

  1. 您发布的代码不会引发任何错误(我认为在您的实际代码中,您可能for x in coocurences.values没有任何括号,这会引发错误)。

  2. x只是字典中值的副本。更改x不会更改字典中的值。请参阅不能在循环 Python 中修改列表元素

  3. 如果您在循环期间更改值,您计算的总和也会发生变化。计算总和的效率也较低,因此您不妨在循环之前计算它。

把它们放在一起:

total = sum(coocurences.values())
for k,v in coocurences.items():
    coocurences[k] = v/total

更好的是,使用 dict 理解:

total = sum(coocurences.values())
answer = {k: v/total for k,v in coocurences.items()}

推荐阅读