2012-02-07 25 views
1

が、私は2つのリストに2つのリストを追加する最も良い方法は?

list1 = [(100, A, 22), (200,B, 33), (300, C, 44)] 

list2 = [(100,A,333), (200,B,444), (500, D, 555)] 

を持っているので、私は私の最終的なリストとして何をしたい、私はちょうど2つのリストを追加する場合、それは文句を言わない私を助け

final_list = [ (100,A, 22, 333), (200,B,33,444), (300,C,44,0), (500,D,0,555)] 

です。どうすれば最終的なリストを得ることができますか?

おかげ

+2

これは、変数として 'list'を使用することが悪い考えですそれがキーワードでもあるときは名前。 – Hooked

+3

@Hooked: 'list'は[keyword](http://docs.python.org/reference/lexical_analysis.html#keywords)ではありません。いずれにしても、組み込み型の名前なので識別子として使用することは悪い考えです。 –

+0

@SvenMarnachあなたがそれを指摘するまで、私は区別を認識しませんでした。私は、Pythonはあなたが任意の予約語に変数を割り当てることができると仮定しました(そして、私は間違って、組み込み型がそのグループに属していると仮定しました)。だから、あなたは 'set'と' list'変数を持つことができますが、 'for'や' yield'はできません。あなたはその背後にある根拠が何であるか知っていますか? – Hooked

答えて

8

ご入力されたデータは、最初の場所での辞書のようになります。

>>> {k: (dict1.get(k, 0), dict2.get(k, 0)) 
... for k in dict1.viewkeys() | dict2.viewkeys()} 
{(100, 'A'): (22, 333), (200, 'B'): (33, 444), 
(300, 'C'): (44, 0), (500, 'D'): (0, 555)} 

(パイソン2.7)

dict1 = {(100, "A"): 22, (200,"B"): 33, (300, "C"): 44} 
dict2 = {(100, "A"): 333, (200,"B"): 444, (500, "D"): 555} 

は今、あなたは簡単に組み合わせ辞書を構築することができます

何らかの理由でリストを操作する必要がある場合は、リストをdiにすることをお勧めしますctionaries最初

dict1 = {(k1, k2): v for k1, k2, v in list1} 
dict2 = {(k1, k2): v for k1, k2, v in list2} 
1

A、B、C、Dなどは不変オブジェクトであることを考えると、最も簡単な方法は、次のようになります。

[list(set(x) | set(y)) for x, y in zip(list1, list2)] 
+2

まずこれを試してみてください。 – DSM

+0

learning_python:ここで何が起こっているのか説明できますか? – damned

関連する問題