Лучший способ добавить два списка?

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 в качестве имени переменной, когда он также является ключевым словом.
  • 3
    @Hooked: list не является ключевым словом . В любом случае, использовать его в качестве идентификатора - плохая идея, поскольку это имя встроенного типа.
Показать ещё 3 комментария
Теги:
list
tuples

2 ответа

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)

Если по какой-то причине вам нужно работать в списках, я бы предложил сначала перевернуть списки в словари

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
    Возможно, вы захотите попробовать это в первую очередь.
  • 0
    learning_python: можете ли вы объяснить, что именно здесь происходит?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню