How to sum values in dictionary based on position?

删除回忆录丶 提交于 2019-12-24 05:52:40

问题


I have a dictionary that for each key there are five values in list, such as:

{"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]}

I want to sum first, second and etc. values for all keys and add it in new list such as:

[0.96, 0.19, 0.3, 1.26, 0]

I tried by below code solve it but It didn't work:

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:


You can use the zip() function

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)  

output :

 [0.96, 0.19, 0.3, 1.26, 0]



回答2:


do you mind using numpy? if not you can use this

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

the output will be : [ 0.96 0.19 0.3 1.26 0. ]




回答3:


You can use reduce in addition with zip to calculate sum by element wise.

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



回答4:


You can try more simple way :

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



回答5:


First of all, you want to use aa.values(), not aa.items(). aa.items gives tuples of (key, value), but you just want the values.

Second of all, you want to sum the items in the list, so use 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))


来源:https://stackoverflow.com/questions/45407538/how-to-sum-values-in-dictionary-based-on-position

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!