Объединение двух списков словарей с использованием общего ключа идентификатора - PullRequest
2 голосов
/ 06 января 2020

У меня есть два следующих списка словарей:

list_1 = [
   {'id': '1', 'name': 'Johnny Johson1'},
   {'id': '2', 'name': 'Johnny Johson2'},
   {'id': '1', 'name': 'Johnny Johson1'},
   {'id': '3', 'name': 'Johnny Johson3'},
]
list_2 = [
   {'id': '1', 'datetime': '2020-01-06T12:30:00.000Z'},
   {'id': '2', 'datetime': '2020-01-06T14:00:00.000Z'},
   {'id': '1', 'datetime': '2020-01-06T15:30:00.000Z'},
   {'id': '3', 'datetime': '2020-01-06T15:30:00.000Z'},
]

По сути, я не хотел бы потерять данные даже на дублирующих идентификаторах, поскольку они представляют разные события (для что, но с целью демонстрации проблемы, не нужно). Если в одном списке есть какие-либо идентификаторы, а не в другом, игнорируйте этот идентификатор все вместе.

В идеале я хотел бы получить следующее (из объединения двух списков):

list_3 = [
   {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T12:30:00.000Z'},
   {'id': '2', 'name': 'Johnny Johson2', 'datetime': '2020-01-06T14:00:00.000Z'},
   {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T15:30:00.000Z'},
   {'id': '3', 'name': 'Johnny Johson3', 'datetime': '2020-01-06T15:30:00.000Z'},
]

1 Ответ

2 голосов
/ 06 января 2020

Вы можете использовать следующее понимание списка, в котором используется синтаксис распаковки с использованием ключевого слова с двойной звездочкой, вычисляемый в обоих списках с использованием попарных элементов, полученных с помощью zip (). Это дает эффект объединения двух словарей в один.

list_3 = [{**x, **y} for x, y in zip(list_1, list_2)]

Вывод:

>>> list3
[{'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T12:30:00.000Z'},
 {'id': '2', 'name': 'Johnny Johson2', 'datetime': '2020-01-06T14:00:00.000Z'},
 {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T15:30:00.000Z'},
 {'id': '3', 'name': 'Johnny Johson3', 'datetime': '2020-01-06T15:30:00.000Z'}]

Обратите внимание, что для этого подхода требуется не менее Python 3.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...