2017-07-31 37 views
1

我有一本字典,對於每個鍵有列表中的五個值,如:如何基於位置來總結字典中的值?

{"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], 
    "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

我要總結第一,第二等的所有鍵的值,並在新的列表,如添加:

[0.96, 0.19, 0.3, 1.26, 0] 

我試圖通過下面的代碼解決,但它沒有工作:

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 
for value in (aa.items()): 
    for item in value: 
     bb.append(item) 
+1

你是什麼意思 「沒有工作」?你得到了什麼錯誤? – honi

+1

'dict.items()'返回的鍵值生成'tuple's,如果需要通過值迭代使用'dict.values()' –

+0

嗨@honi,其結果是:'[ 'A',[ '0',0.12,0,0.73,0],'C',[0,0,0,0.11,0],'B',[0.96,0,0.3,0,0],'D',[ 0.07,0,0.42,0]]' – nickan

回答

1

可以使用zip()功能

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 

for value in (zip(*list(aa.values()))): 
      bb.append(sum(value)) 


print (bb) 

輸出:

所有的
[0.96, 0.19, 0.3, 1.26, 0] 
+0

謝謝@Kaushik Nayak,完成了。 – nickan

+1

或者更簡單地說:'BB = [將在壓縮的和(數值)(* aa.values())]' – AChampion

-1

首先,您要使用aa.values(),不aa.items()aa.items給出(鍵,值)的元組,但你只是想要的值。

所有第二,要總結在列表中的項目,所以用總和。

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
bb = [] 
for value in (aa.values()): 
     bb.append(sum(value)) 
+0

爲什麼downvote? – honi

+0

結果爲你的代碼是:[0.85,0.11,1.26,0.49],這是不正確的。 – nickan

+0

啊,我誤解了你的問題。 – honi

1

你介意用numpy嗎? 如果沒有您可以使用此

aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

import numpy as np 
bb = np.array([aa.get(a) for a in aa]) 
print(np.sum(bb, axis=0)) 

輸出將是:0.96 0.19 1.26 0.3 0.1]

1

除了可以使用reducezip通過單元方式來計算總和。

from functools import reduce 

a = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], 
    "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 

b = reduce(lambda x, y: ([x1 + y1 for x1,y1 in zip(x,y)]), a.values()) 
1

您可以嘗試更簡單的方法:

>>> aa = {"A": [0, 0.12, 0, 0.73, 0], "B": [0.96, 0, 0.30, 0, 0], "C": [0, 0, 0, 0.11, 0], "D": [0, 0.07, 0, 0.42, 0]} 
>>> b = [sum(value) for value in zip(*aa.values())] 
>>> b 
[0.96, 0.19, 0.3, 1.26, 0] 
>>> 
相關問題