我有一个字典,它的值是列表列表。我想总结列表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]}
答案 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