如何对列表列表中的项目进行求和并将其列为一个列表?

时间:2018-03-20 23:51:18

标签: python list dictionary sum

我有一个字典,它的值是列表列表。我想总结列表1中的第一项,列表2中的第一项,....到最后,然后为所有项目执行。最后,我将有一个列表作为我的dict的值。所有列表都有相同的长度。

  

my_dict = {'r1': [[0,1,0,1],[1,1,0,1],[0,1,1,1],[1,0,0,1]] , 'r2' : [[1,0,0,0],[1,1,0,0],[0,1,1,0],[1,0,0,1]]}

结果:

   my_dict = {'r1':[2,3,1,4], 'r2' : [3,2,1,1]}

3 个答案:

答案 0 :(得分:1)

你可以使用词典理解:

new_dict = {k: list(map(sum, zip(*v))) for k, v in my_dict.items()}

这里的关键思想是zip(* v),它将您的列表列表转换为第i个元素的列表列表:

zip(*[[1,2,3,4], [5,6,7,8]])   # returns [[1, 5], [2, 6], [3, 7], [4, 8]]

答案 1 :(得分:1)

您可以尝试:

my_dict = {'r1': [[0,1,0,1],[1,1,0,1],[0,1,1,1],[1,0,0,1]] , 'r2' : [[1,0,0,0],[1,1,0,0],[0,1,1,0],[1,0,0,1]]}

print({i:map(lambda x:sum(x),zip(*j)) for i,j in my_dict.items()})

输出:

{'r1': [2, 3, 1, 4], 'r2': [3, 2, 1, 1]}

答案 2 :(得分:0)

这个操作会比numpy简单得多。

您可以尝试这样的事情:

import numpy as np
result = {}
for k in my_dict:
    v = np.array(my_dict[k]).sum(axis=0).tolist()
    result[k] = v