Как сравнить два словаря 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 — неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.
Чтобы работать со словарём, его нужно создать. Сделать это можно несколькими способами. Во-первых, с помощью литерала:
Во-вторых, с помощью функции 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
Наши условия использования и конфиденциальности

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