Вы как-то не очень четко поставили задачу.
- Нужно прояснить следующие важные детали:
- У различной пары может отличаться как ключ, так и значение по отдельности?
- Наборы ключей одинаковые? Неодинаковые? Могут отличаться?
- Значения хешируемые?
- Количество пар совпадает, или одна пара в одном из словарей может отсутствовать?
- Одна и только одна пара?
- Какая версия Питона? Если третья, то словари одинаково упорядочены по ключу? Может быть они еще и отсортированы? Ну мало ли...
- Насколько большие словари? Их размер сопоставим с полным объёмом памяти?
- Ваша задача выглядит так, будто имеет смысл решать её немного в другом месте и в другое время (в смысле формирования структуру данных и заполнения их). Поясните почему такая задача возникла, возможно есть другой, более элегантный и эффективный подход, нежели сравнивать большие словари.
Похоже вот это будет для вас приемлемым решением:
import typing
def ddif(a: dict, b: dict) -> typing.Iterable[tuple]:
return filter(None, (None if va == b[k] else (k, va, b[k]) for k, va in a.items()))
a = {1: 11, 2: 22, 3: [1, 2, 3], 4: 44, 5: 55}
b = {1: 11, 2: 22, 3: [1, 2, 4], 4: 44, 5: 56}
for k, v1, v2 in ddif(a, b):
print(f'{k}: {v1!r} != {v2!r}')
Там возвращается итератор, поэтому, если вы уверены, что различие только одно, то можете воcпользоваться islice, чтобы остановиться на первом различии:
from itertools import islice
print(
list(islice(ddif(a, b), None, 1))
)