На этом шаге мы рассмотрим простой спосб решения этой задачи.
У вас два словаря, и вы хотите выяснить, что у них общего (одинаковые ключи, значения и т. п.).
Рассмотрим два словаря:
a = {
'x': 1,
'y': 2,
'z': 3
}
b = {
'w': 10,
'x': 11,
'y': 2
}
Чтобы найти общие элементы, просто выполните обычный набор операций с использованием методов keys() и items(). Например:
# Находим общие ключи a.keys() & b.keys() # { 'x', 'y' } # Находим ключи, которые есть в а, но которых нет в b a.keys() - b.keys() # { 'z' } # Находим общие пары (key,value) a.items() & b.items() # { ('y', 2) }
Операции такого типа также могут быть использованы для изменения или фильтрования содержимого словаря. Предположим, например, что вы хотите создать новый словарь, в котором некоторые ключи удалены. Взгляните на этот пример кода генератора словаря (dictionary comprehension): # Создаем новый словарь, из которого удалены некоторые ключи
c = {key:a[key] for key in a.keys() - {'z', 'w'}}
# c - это {'x': 1, 'y': 2}
Словарь - это отображение множества ключей на множество значений. Метод словаря keys() возвращает объект ключей словаря (dict_keys). Малоизвестная особенность этих объектов заключается в том, что они поддерживают набор операций над множествами: объединения, пересечения, разности. Так что если вам нужно выполнить этот набор операций над ключами словаря, вы можете использовать объект ключей словаря напрямую, без предварительного конвертирования во множество.
Метод словаря items() возвращает объект значений словаря, состоящий из пар (key, value). Этот объект поддерживает похожий набор операций и может быть использован для выполнения таких операций, как поиск того, какие пары ключ-значение являются общими для двух словарей.
Хотя метод словаря values() похож на предыдущие, он не поддерживает операции над множествами, описанные выше в этом рецепте. Это происходит, в частности, по причине того, что, в отличие от ключей, значения могут и не быть уникальными. Один этот факт делает бесполезным применение к ним операций над множествами. Если же, однако, вы вынуждены выполнить такие операции, этого можно добиться простым путем предварительного конвертирования значений во множество.
На следующем шаге мы рассмотрим удаление дубликатов из последовательности с сохранением порядка элементов.