Как показать разницу между двумя списками словарей ⇐ Python

Программы на Python
Anonymous
Как показать разницу между двумя списками словарей

Сообщение Anonymous »

У меня есть два списка:

Код: Выделить всё

list1 = [
{'name': 'one', 'email': 'one@gmail.com', 'phone': '111'},
{'name': 'two', 'email': 'two@gmail.com', 'phone': '111'},
{'name': 'three', 'email': 'three@gmail.com', 'phone': '333'},
{'name': 'four', 'email': 'four@gmail.com', 'phone': '444'},
]
list2 = [
{'first_name': 'three', 'email': 'three@gmail.com', 'phone_number': '333'},
{'first_name': 'four', 'email': 'four@gmail.com', 'phone_number': '444'},
{'first_name': 'five', 'email': 'five@gmail.com', 'phone_number': '555'},
]
Я знаю, как найти разницу между двумя списками по ключу:

Код: Выделить всё

list1_only = list(set([x['phone'] for x in list1]) - set([x['phone_number'] for x in list2]))
Но текущий вывод:

Код: Выделить всё

['111']
Но в конце концов я получу вот такой результат:

Код: Выделить всё

[
{'name': 'one', 'email': 'one@gmail.com', 'phone': '111'},
{'name': 'two', 'email': 'two@gmail.com', 'phone': '111'}
]
Я знаю этот способ, но думаю (и уверен), что есть способ получше:

Код: Выделить всё

for l in list1:
for d in diff:
if d == l['phone']:
print(l)

Я читал другие подобные вопросы, но он печатает весь список (а не значения разницы):

Код: Выделить всё

[x for x in list2 if x['phone_number'] not in list1]
Не могли бы вы помочь мне с этим?
Есть ли однострочные способы замены на list1_only = list(set([x[' телефон'] для x в списке1]) - set([x['phone_number'] для x в списке2]))?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ctionaries

Вернуться в «Python»