2015-10-15 720 views
1

謝謝你的幫助。我是python的新手。也感謝您的耐心。我試圖生成一個字典,它將值列表中的每個值除以值列表中所有值的總和,以獲得該值表示任何給定鍵的總和的相對比例。python字典將總價值列表中的每個值除以總數

大約有8,000個唯一鍵,每個鍵的值在1到20之間。

以下是將兩個列表(k,v)成功組合成字典後選取的代碼片段。

(注意最後的循環是在錯誤發生時)

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循環print語句後造型,它是這樣的......( '030502060106',[0.193619687,0.254728018,0.18369762,0.367954675]),......

+0

嘗試鑄造你的列表值作爲浮動,像這樣:浮置(名單) – digitaLink

回答

1

使用列表理解去查看價值清單,用總和除以每一個,然後返回一個列表。

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

錯誤告訴你這個問題。在線

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

您正在嘗試使用列表和浮動的除法運算符。列表不能是/運算符的操作數。如果您試圖通過一些常量來劃分列表中的所有元素,您可以使用for循環來完成此操作。

編輯: Hayley的答案更pythonic,並會優於for循環。可能是更好的方式去。

0

試試這個:

ddd = defaultdict(list) 

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