2012-02-07 3 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

+3

@Hooked: 'list' не является [ключевым словом] (http://docs.python.org/reference/lexical_analysis.html#keywords). Плохая идея использовать его как идентификатор, так как это имя встроенного типа. –

+0

@SvenMarnach Я не осознавал различия, пока вы не указали это. Я предположил, что python позволяет назначать переменную любому зарезервированному слову (и я ошибочно полагал, что встроенные типы принадлежали этой группе). Таким образом, кажется, что вы можете иметь переменную 'set' и' list', но не 'for' или' yield'. Знаете ли вы, что это за обоснование? – Hooked

ответ

8

Ваши входные данные должны быть словари, в первую очередь:

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

Теперь вы можете легко построить комбинированный Dict:

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

Смежные вопросы