假设我创建了一个由n个键组成的dict。每个键都映射到一致长度的整数列表。我现在要做的是一个新列表,它表示dict列表中每个点的整数之和。举例说明:
my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}
total_sum_list = []
for key in my_dict.keys():
total_sum_list += ###some way of adding the numbers together
预期产出:
total_sum_list = [6,9,12,15]
如上所示,我不知道如何设置此for循环,以便我可以创建像total_sum_list
这样的列表。我已经尝试过整理列表,但到目前为止我的努力还没有成功。有什么建议吗?
答案 0 :(得分:8)
您需要的是转置列表,以便对列进行求和。因此,对列表理解中的字典值(键可以忽略)和zip
使用sum
:
在一行中:
total_sum_list = [sum(x) for x in zip(*my_dict.values())]
结果:
[6, 9, 12, 15]
工作原理:
zip
交错值。我正在使用参数解包来传递dict值是zip
的参数(如zip(a,b,c)
)。所以当你这样做时:
for x in zip(*my_dict.values()):
print(x)
你得到(tuple
):
(1, 3, 2)
(2, 4, 3)
(3, 5, 4)
(4, 6, 5)
数据已准备好求和(即使按不同的顺序排列,但我们并不关心,因为加法是可交换的:))
答案 1 :(得分:3)
根据您的使用情况,您可能需要考虑使用适当的库来实现更一般/复杂的功能。
import numpy as np
my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}
arr = np.array(list(d.values()))
# [[1 2 3 4]
# [2 3 4 5]
# [3 4 5 6]]
arr.sum(axis=0)
# [ 6 9 12 15]
import pandas as pd
my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}
df = pd.DataFrame(my_dict)
# a b c
# 0 1 2 3
# 1 2 3 4
# 2 3 4 5
# 3 4 5 6
df.sum(axis=1)
# 0 6
# 1 9
# 2 12
# 3 15