Тестирование на равенство работает отлично, как это для python dicts:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # Result: True
Но теперь мой второй dict содержит некоторые дополнительные ключи, которые я хочу игнорировать:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}
Есть ли простой способ проверить, является ли первый dict частью второго dict, со всеми его ключами и значениями?
РЕДАКТИРОВАТЬ 1:
Этот вопрос, как предполагается, является дубликатом Как проверить, содержит ли словарь определенные ключи, но я заинтересован в тестировании ключей и их значений. Просто содержащие одни и те же ключи не делают два диктофона равными.
ИЗМЕНИТЬ 2:
ОК, теперь я получил несколько ответов, используя четыре разных метода, и доказал, что все они работают. Поскольку мне нужен быстрый процесс, я тестировал каждый для времени выполнения. Я создал три идентичных dicts с 1000 элементами, ключи и значения были случайными строками длиной 10. В second
и third
были добавлены дополнительные пары ключ-значение, а последний не-дополнительный ключ third
получил новый стоимость. Итак, first
является подмножеством second
, но не third
. Используя модуль timeit
с 10000 повторениями, я получил:
Method Time [s]
first.viewitems() <=second.viewitems() 0.9
set(first.items()).issubset(second.items()) 7.3
len(set(first.items()) & set(second.items())) == len(first) 8.5
all(first[key] == second.get(key, sentinel) for key in first) 6.0
Я догадался, что последний метод является самым медленным, но он находится на месте 2. Но метод 1 превосходит их всех.
Спасибо за ваши ответы!