Сравните два списка словаря и удалите словарь из списка, если ключ и значение существуют - PullRequest
0 голосов
/ 27 декабря 2018

На основании следующих двух списков словарей, как удалить словарь в списке list1 на основе ключа («name») и значения из list2?

list1 = [{'name':'john','age':'12','gender':'male'},
         {'name':'sam', 'age':'11','gender':'male'},
         {'name':'tom', 'age':'12','gender':'male'},
         {'name':'elsa','age':'14','gender':'female'},
         {'name':'juhi','age':'13','gender':'female'}]


list2 = 
     [{'name':'tom','gender':'male','status':1,'subject':'english'},             
   {'name':'elsa','gender':'female','status':0,'subject':'english'}]


Expected_list = [{'name':'john','age':'12','gender':'male'},
         {'name':'sam', 'age':'11','gender':'male'},
         {'name':'juhi','age':'13','gender':'female'}]

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете использовать set для формирования имен, которые вы хотите удалить.А затем отфильтруйте свой первый список.

Использование пониманий:

names = {x['name'] for x in list2}
expected_list = [x for x in list1 if x['name'] not in names]

Использование функционального стиля:

names = set(map(lambda x: x['name'], list2))
expected_list = list(filter(lambda x: x['name'] not in names, list1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...