我有两个Python列表:
L1=[[100, 1], [101, 2]]
L2=[[100, 3], [101, 4], [102, 5]]
我想将它们合并以获得以下结果:
L_merge=[[100, 4], [101, 6], [102, 5]]
两个列表的大小可能不相同很重要。
我试图使用字典,但无法弄清楚。我很乐意使用numpy,pandas或任何其他工具来获取合并结果。
collections.Counter
并将它们简单地求和:from collections import Counter
L1 = [[100, 1], [101, 2]]
L2 = [[100, 3], [101, 4], [102, 5]]
L_merge = (Counter(dict(L1)) + Counter(dict(L2))).items()
print(list(L_merge))
# [(100, 4), (101, 6), (102, 5)]
list(L_merge)
会产生元组而不是列表?有什么方法可以避免它(只是出于好奇)? - valenzioitems
方法会生成一个元组列表。你可以使用列表推导式将元组转换为列表。 - Moses Koledoye为什么不直接使用for循环:
L_merge = L2
for i in len(L1):
L_merge[i][-1] += L1[i][-1]
唯一的注意事项是,仅当L2是两个列表中较长的列表时才起作用
L1=[[100, 1], [101, 2]]
L2=[[100, 3], [101, 4], [102, 5]]
d = {}
for a,b in L1+L2:
d[a] = d.get(a,0) + b
L_merge = [[k,v] for k,v in d.items()]
print(L_merge)
collections.Counter(dict(L1)) + collections.Counter(dict(L2))
。可能有一种方法可以跳过先将列表转换为dict
的步骤。请参见https://dev59.com/L2gu5IYBdhLWcg3wfHE_。 - vaultah