2016-10-20 111 views
3

我有兩個列表中的Python:合併兩個列表一起

L1=[[100, 1], [101, 2]] 
L2=[[100, 3], [101, 4], [102, 5]] 

,我想將它們合併,所以我得到:

L_merge=[[100, 4], [101, 6], [102, 5]] 

兩個名單可能不的是很重要的相同的尺寸。

我試圖使用字典,但無法弄清楚。我很高興使用numpy,熊貓或任何其他工具來獲得合併。

+0

適應從t溶液他鏈接上面:'collections.Counter(dict(L1))+ collections.Counter(dict(L2))'。可能有一種方法可以首先將列表轉換爲「dict」。請參閱http://stackoverflow.com/q/11290092/2301450 – vaultah

+0

你對這兩個列表有什麼瞭解?他們都是完全分類的嗎?中間是否有「差距」,其中一個項目在一個列表中,而另一個列表中沒有?你確定每個項目都是兩個整數列表嗎?等等。 –

+0

「重複」的問題是關於組合的字跡,而不是列表 – mkj

回答

4

你可以在兩個列表中使用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)] 
+0

這很好,只是一個快速跟進:爲什麼'list(L_merge)'生成的結果而不是列表反正到避免它(只是出於好奇)。 – valenzio

+0

@valenzio字典的'items'方法產生一個元組列表。您可以使用列表理解將元組轉換爲列表。 –

0

爲什麼不直接使用一個for循環:

L_merge = L2 
for i in len(L1): 
    L_merge[i][-1] += L1[i][-1] 

一個需要注意的是,這僅適用於如果L2是2所列出的長

+0

是的,我猜你可以事先檢查哪個列表更長,但它看起來相當麻煩 – valenzio

0
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)