Как сравнить два словаря python по ключам
Перейти к содержимому

Как сравнить два словаря python по ключам

  • автор:

Как сравнить два словаря python и узнать каких ключей нет в том или ином словаре

Мне необходимо написать код, который мог бы отображать ключ которого нет в другом словаре, как это можно сделать? В качестве результата должно получиться:

"key ['python'] not in dict ['cc']" # написал для примера 

Отслеживать
задан 14 сен 2021 в 14:00
869 3 3 золотых знака 9 9 серебряных знаков 30 30 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Ключи словаря — это множество. Множества можно вычитать:

a = b = print(a.keys()-b.keys()) print(b.keys()-a.keys()) 

Т.е. в данном случае множество ключей первого словаря целиком есть во втором словаре.
А вот во втором словаре не хватает двух ключей относительно первого словаря.

Отслеживать
ответ дан 14 сен 2021 в 14:05
69.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак

+1, не знал, что ключи словаря могут играть роль множества, точнее что этим занимается тип dict_keys , хотя проверку isinstance на set проваливает 🙂

14 сен 2021 в 14:51

@gil9red Да я сам немного удивился, что к множеству не нужно приводить, проверил на всякий — и так прокатило )

14 сен 2021 в 16:02

Можно через множества получить разницу в ключах словарей

d1 = d2 = result = set(d1).difference(set(d2)) if result: print(f'В d2 нет ключей d1: ') else: print('В d1 все ключи d2') result = set(d2).difference(set(d1)) if result: print(f'В d1 нет ключей d2: ') else: print('В d2 все ключи d1') 
В d1 все ключи d2 В d1 нет ключей d2:

UPD.

Вместо difference можно использовать оператор — , пример:

result = set(d1) - set(d2) 

Как сравнить значения словаря со списком и при совпадении напечатать ключ?

Находил решение в интернете, но подстроить под мой случай не смог, получаю ошибки. Вот мой гавнокод:

a = input().split() # Нужно вводить строки через пробел: a ab abc aab n = int(input()) # Вводим одно число index = [] for s in a: index.append([s.find(c) for c in s]) print(index) # Выводит вложенные списки вида [[a,b,c], [d,e,f]] dict_ = dict(zip(a, index)) print(dict_) # Превращает вложенный список в словарь вида temp = [] count = 0 lst = [] while n != 0: word = input().split() for s in word: lst = [s.find(ss) for ss in s] print(lst) # Циклически выводит списки: [a,b,c] n -= 1

Код разделен на две части, первая часть создает словарь, а вторая просит вводить строки, которые нужно вводить по очереди. Дальше не реализовал, но после каждого ввода программа должна сравнивать её со значениями словаря и при совпадении поместить ключ этого значения в переменную и распечатать её, а если не совпадает, то запрашивает вводить еще, пока не закончатся попытки, указанные в переменной n. Пожалуйста, помогите дописать эти несколько строчек в последнем цикле.

  • Вопрос задан более трёх лет назад
  • 2894 просмотра

2 комментария

Простой 2 комментария

Словари (dict) и работа с ними. Методы словарей

Python 3 логотип

Сегодня я расскажу о таком типе данных, как словари, о работе со словарями, операциях над ними, методах, о генераторах словарей.

Словари в Python — неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.

Чтобы работать со словарём, его нужно создать. Сделать это можно несколькими способами. Во-первых, с помощью литерала:

Во-вторых, с помощью функции dict:

В-третьих, с помощью метода fromkeys:

В-четвертых, с помощью генераторов словарей, которые очень похожи на генераторы списков.

Теперь попробуем добавить записей в словарь и извлечь значения ключей:

  : Как видно из примера, присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение. Для избежания исключения есть специальный метод (см. ниже), или можно перехватывать исключение.

Что же можно еще делать со словарями? Да то же самое, что и с другими объектами: встроенные функции, ключевые слова (например, циклы for и while), а также специальные методы словарей.

Методы словарей

dict.clear() — очищает словарь.

dict.copy() — возвращает копию словаря.

classmethod dict.fromkeys(seq[, value]) — создает словарь с ключами из seq и значением value (по умолчанию None).

dict.get(key[, default]) — возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None).

dict.items() — возвращает пары (ключ, значение).

dict.keys() — возвращает ключи в словаре.

dict.pop(key[, default]) — удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).

dict.popitem() — удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены.

dict.setdefault(key[, default]) — возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ со значением default (по умолчанию None).

dict.update([other]) — обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!).

dict.values() — возвращает значения в словаре.

Для вставки кода на Python в комментарий заключайте его в теги

Как сравнить два словаря python по ключам

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *