我有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的每个元素,它的第一个值等于最终列表的第一个元素之一,那么最终列表的相应元素必须具有等于第二个值的总和。找到的元素。)
答案 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)]