感谢您的帮助。我是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]),....
答案 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)