2012-02-07 72 views
1

我有兩個列表添加兩個列表的最佳方式?

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

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

所以我想爲我的最終名單是

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

如果我只是添加了兩個列表,它不會幫助我。我怎樣才能達到最終名單。

感謝

+2

這是一個壞主意,用'list'作爲變量它也是關鍵字時的名稱。 – Hooked 2012-02-07 14:32:57

+3

@Hooked:'list'不是[關鍵字](http://docs.python.org/reference/lexical_analysis.html#keywords)。無論如何,將它用作標識符是一個壞主意,因爲它是內置類型的名稱。 – 2012-02-07 15:01:58

+0

@SvenMarnach我沒有意識到這種區別,直到你指出。我假設python讓你爲任何保留字指定一個變量(並且我錯誤地認爲內置類型屬於該組)。所以看起來你可以有一個'set'和'list'變量,但不是'for'或'yield'。你知道背後的理由是什麼嗎? – Hooked 2012-02-07 15:55:52

回答

8

輸入數據應該是擺在首位的字典:

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

現在,您可以輕鬆地構建一個組合字典:

>>> {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)} 

(Python 2.7版)

如果由於某種原因你需要在列表上操作,我建議將你的列表變成di第一

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

ctionaries鑑於A,B,C,d,等等都是不可變對象,最簡單的方法是:

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

您可能想先嚐試一下。 – DSM 2012-02-07 14:50:21

+0

learning_python:你能解釋一下到底發生了什麼嗎? – damned 2012-07-07 06:26:24