如何根据位置对字典中的值求和?

时间:2017-07-31 04:39:10

标签: python dictionary sum key-value

我有一个字典,每个键列表中有五个值,例如:

{"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)

5 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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 0.3 1.26 0.]

答案 2 :(得分:1)

除了reduce之外,您还可以使用zip来按元素计算总和。

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())

答案 3 :(得分: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]
>>>

答案 4 :(得分:-1)

首先,您要使用aa.values(),而不是aa.items()aa.items给出(键,值)元组,但您只需要值。

其次,您想要对列表中的项目求和,因此请使用sum。

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))