Сравнение двух словарей и вывод пары ключей в Python

У меня есть два словаря:

a= { "fruits": ["apple", "banana"] }
b = { "fruits": ["apple", "carrot"]}

Теперь я хочу напечатать различия. И я хочу в этом случае вывод должен быть

{'fruits' : 'carrot'}

также, если ключи изменились - предположим, изменился ли на

b = { "toy": "car"}

тогда вывод должен быть

{ "toy": "car"}

Заранее спасибо.

2 ответа

Решение

Это похоже на dict.viewitems может быть хорошим методом, чтобы посмотреть. Это позволит нам легко увидеть, какие пары ключ / значение находятся в a которые не в b:

>>> a = { 'fruits': 'apple' 'grape', 'vegetables': 'carrot'}
>>> b = { 'fruits': 'banana'}
>>> a.viewitems() - b.viewitems()  # python3.x -- Just use `items` :)
set([('fruits', 'applegrape'), ('vegetables', 'carrot')])
>>> b['vegetables'] = 'carrot'  # add the correct vegetable to `b` and try again.
>>> a.viewitems() - b.viewitems()
set([('fruits', 'applegrape')])

Мы даже можем получить представление о том, какова разница на самом деле, если использовать симметричную разницу:

>>> a.viewitems() ^ b.viewitems()
set([('fruits', 'applegrape'), ('fruits', 'banana')])

Вы также можете сделать что-то подобное с viewkeys (keys на python3.x), если вас интересует только то, какие ключи были изменены.

Что касается различий, вы можете использовать словарь понимания только для фильтрации b ключи, которые находятся в a:

>>> {key: b[key] for key in b if key in a}
{'fruits': 'banana'}

Ко второй части, "если ключи изменились", {'froot'} неверный словарь, а ключи неизменны. Так что это невозможно.

Другие вопросы по тегам