2016-10-20 3 views
3

私はPythonで二つのリストを持っている:マージ二つのリストが一緒に

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

と私は私が手にそれらをマージしたい:

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

二つのリストがないのかもしれないということが重要です同じサイズ。

私は辞書を使用しようとしていましたが、それを理解できませんでした。私は、その合併を得るためにnumpy、pandas、または他のツールを使用して満足しています。

+0

彼は上のリンク: 'collections.Counter(dict(L1))+ collections.Counter(dict(L2))'です。おそらくリストを 'dict'に変換するのをスキップする方法があります。 http://stackoverflow.com/q/11290092/2301450 – vaultah

+0

2つのリストについて何を知っていますか?彼らはどちらも確実に分類されていますか?アイテムがあるリストにありますが、他のリストにはない「ギャップ」が中央にありますか?各項目が2つの整数のリストであると確信していますか?等々。 –

+0

"重複"の質問は、リストではなく、辞書の組み合わせについてです。 – mkj

答えて

4

の長く、単に場合にのみ動作することです合計それら:

トンからソリューションを適応さ
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

これはすばらしい、ちょっとしたフォローアップです:なぜリスト 'L_merge'はリストの代わりにタプルを生成するのですか?それを避けてください(ちょうど好奇心の外に)。 – valenzio

+0

@valenzio辞書の 'items'メソッドは、タプルのリストを生成します。リストの解説を使用してタプルをリストにキャストできます。 –

0

理由だけforループを使用しない:

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

1つの警告は、L2は、あなたが両方のリストにcollections.Counterを使用することができます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) 
関連する問題