如何根据位置对字典中的值求和?
How to sum values in dictionary based on position?
我有一个字典,每个键在列表中有五个值,例如:
{"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)
您可以使用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]
首先,您想使用aa.values()
,而不是aa.items()
。 aa.items
给出 (key, value) 的元组,但您只需要值。
其次,你想对列表中的项目求和,所以使用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))
你介意使用 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.]
您可以使用 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())
您可以尝试更简单的方法:
>>> 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]
>>>
我有一个字典,每个键在列表中有五个值,例如:
{"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)
您可以使用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]
首先,您想使用aa.values()
,而不是aa.items()
。 aa.items
给出 (key, value) 的元组,但您只需要值。
其次,你想对列表中的项目求和,所以使用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))
你介意使用 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.]
您可以使用 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())
您可以尝试更简单的方法:
>>> 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]
>>>