python词典将值列表中的每个值除以总计

时间:2015-10-15 02:38:41

标签: python dictionary

感谢您的帮助。我是python的新手。还要感谢您的耐心等待。我试图生成一个字典,它将值列表中的每个值除以值列表中所有值的总和,以获得该值代表任何给定键的总和的相对比例。

大约有8,000个唯一键,每个键包含1到20个值。

以下是成功将两个列表(k,v)组合到字典中后选择的代码片段。

(注意最后一个for循环是发生错误的地方)

from collections import defaultdict

d = defaultdict(list)
    for k, v in values:
        d[k].append(v)
print list(d.items())

print语句生成一个键列表和值列表,如下所示....,('030502060106',[20008611.2,26323531.9,18983267.9,38024346.8]),....

for key in d:
    dd[key] = sum(d[key])
print list(dd.items())

print语句生成一个键列表和值列表,如下所示(注意值是上面值的总和)....,('030502060106',[2103339755]),.....

for key in d:
    ddd[key] = [d[key]/sum(d[key])]
print list(ddd.items())     

此for循环中出现错误,出现以下错误消息TypeError:/:'list'和'float'

的不支持的操作数类型

如何使用键和值列表生成新词典,其中值列表中的每个值都按值的总和进行归一化(除)?

在第一个For Loop打印语句之后对它进行建模,它看起来像这样,...('030502060106',[0.193619687,0.254728018,0.18369762,0.367954675]),....

3 个答案:

答案 0 :(得分:1)

使用列表推导来浏览值列表,将每个值除以总和,然后返回一个列表。

for key in d:
    ddd[key] = [val/sum(d[key]) for val in d[key]]
print list(ddd.items())

答案 1 :(得分:0)

错误告诉你问题。在行

[d[key]/sum(d[key])]

您正在尝试将除法运算符与列表和浮点数一起使用。列表不能是/运算符的操作数。如果您尝试将列表中的所有元素除以某个常量,则可以使用for循环来执行此操作。

编辑: Hayley的答案更具有pythonic,并且优于for循环。可能是更好的方式。

答案 2 :(得分:0)

试试这个:

ddd = defaultdict(list)

for key in d:
    sum = sum(d[key])
    for value in d[key]:
        ddd[key].append(value / sum)