在python中使用不同长度的Sum列表

时间:2017-11-08 19:02:14

标签: python python-2.7 python-3.x subprocess

我有3个不同长度的列表。它们是这样的:

int x;
int x = 7;   

我想要获得这样的final_list:

final_list = [[1230, 0], [1231,0],[1232,0], [1233, 0], [1234, 0]]

list2 = [[1232, 20], [1233, 30]]
list3 = [[1230, 10], [1231,20],[1232,40]]

(如果,考虑list2和list3的每个元素,它的第一个值等于最终列表的第一个元素之一,那么最终列表的相应元素必须具有等于第二个值的总和。找到的元素。)

2 个答案:

答案 0 :(得分:0)

不是一个干净的解决方案,但易于掌握并可能节省您的一天。

f = {}
dcts = map(lambda l: dict([l]), list2+list3)
for dct in dcts:
    for k in dct.iterkeys():
        f[k] = w.get(k, 0) + d[k]
final_list = map(list, f.items())

但是,如果您熟悉itertools

import groupby from itertools

merged = list2+list3
final_list = []

for key, group in groupby(merged, key = lambda e: e[0]):
    final_list.append([key, sum(j for i, j in group)])

或oneliner

[[k, sum(j for i, j in g)] for k, g in  groupby(list3+list2, key = lambda e: e[0])]

答案 1 :(得分:0)

我创建了一个temp_list并将所有三个列表附加到其中。 创建一个字典dic并循环遍历temp_list以总结密钥上的每个元组。 然后我将dic转回列表并对其进行排序。

我承认这不是最有效的方法。但这是一个解决方案。

temp_list = []
temp_list.append(final_list)
temp_list.append(list2)
temp_list.append(list3)

dic = {}

for lst in temp_list:
    for tp in lst:
        if tp[0] in dic:
            dic[tp[0]] = dic[tp[0]] + tp[1]
        else:
            dic[tp[0]] = tp[1]

result = []

for key, value in dic.iteritems():
    temp = [key,value]
    result.append(temp)

result.sort()

结果:

[(1230, 10), (1231, 20), (1232, 60), (1233, 30), (1234, 0)]