Как проверить наличие ключа в словаре?
Возможно пригодится вариант с возвратом ключа в случае, если он найден в словаря, либо False в случае его ненахождения:
dict = dict.get('a', False) # 5 dict.get('c', False) # False
Именно под ваш запрос можно изменить так:
if dict.get('a', False) != False: return True else: return False
Отслеживать
ответ дан 9 янв 2022 в 17:37
23 9 9 бронзовых знаков
Для d = <'a': False>; скажет что ключа ‘a’ в словаре нет. А он там есть.'a':>
9 янв 2022 в 17:50
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
- python
- python-3.x
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как проверить наличие ключа в словаре python
Словарь (dictionary) в языке Python хранит коллекцию элементов, где каждый элемент имеет уникальный ключ и ассоциированое с ним некоторое значение.
Определение словаря имеет следующий синтаксис:
dictionary =
В фигурных скобках через запятую определяется последовательность элементов, где для каждого элемента сначала указывается ключ и через двоеточие его значение.
users =
В словаре users в качестве ключей используются числа, а в качестве значений — строки. То есть элемент с ключом 1 имеет значение «Tom», элемент с ключом 2 — значение «Bob» и т.д.
emails =
В словаре emails в качестве ключей используются строки — электронные адреса пользователей и в качестве значений тоже строки — имена пользователей.
Но необязательно ключи и строки должны быть однотипными. Они могу представлять разные типы:
objects =
Мы можем также вообще определить пустой словарь без элементов:
objects = <>
objects = dict()
Преобразование списков и кортежей в словарь
Несмотря на то, что словарь и список — непохожие по структуре типы, но тем не менее существует возможности для отдельных видов списков преобразования их в словарь с помощью встроенной функции dict() . Для этого список должен хранить набор вложенных списков. Каждый вложенный список должен состоять из двух элементов — при конвертации в словарь первый элемент станет ключом, а второй — значением:
users_list = [ [«+111123455», «Tom»], [«+384767557», «Bob»], [«+958758767», «Alice»] ] users_dict = dict(users_list) print(users_dict) #
Подобным образом можно преобразовать в словарь двухмерные кортежи, которые в свою очередь содержать кортежи из двух элементов:
users_tuple = ( ("+111123455", "Tom"), ("+384767557", "Bob"), ("+958758767", "Alice") ) users_dict = dict(users_tuple) print(users_dict)
Получение и изменение элементов
Для обращения к элементам словаря после его названия в квадратных скобках указывается ключ элемента:
dictionary[ключ]
Например, получим и изменим элементы в словаре:
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" ># получаем элемент с ключом "+11111111" print(users["+11111111"]) # Tom # установка значения элемента с ключом "+33333333" users["+33333333"] = "Bob Smith" print(users["+33333333"]) # Bob Smith
Если при установки значения элемента с таким ключом в словаре не окажется, то произойдет его добавление:
users["+4444444"] = "Sam"
Но если мы попробуем получить значение с ключом, которого нет в словаре, то Python сгенерирует ошибку KeyError:
user = users["+4444444"] # KeyError
И чтобы предупредить эту ситуацию перед обращением к элементу мы можем проверять наличие ключа в словаре с помощью выражения ключ in словарь . Если ключ имеется в словаре, то данное выражение возвращает True:
key = "+4444444" if key in users: user = users[key] print(user) else: print("Элемент не найден")
Также для получения элементов можно использовать метод get , который имеет две формы:
- get(key) : возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение None
- get(key, default) : возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение по умолчанию default
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >user1 = users.get("+55555555") print(user1) # Alice user2 = users.get("+33333333", "Unknown user") print(user2) # Bob user3 = users.get("+44444444", "Unknown user") print(user3) # Unknown user
Удаление
Для удаления элемента по ключу применяется оператор del :
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >del users[«+55555555»] print(users) #
Но стоит учитывать, что если подобного ключа не окажется в словаре, то будет выброшено исключение KeyError. Поэтому опять же перед удалением желательно проверять наличие элемента с данным ключом.
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >key = "+55555555" if key in users: del users[key] print(f"Элемент с ключом удален") else: print("Элемент не найден")
Другой способ удаления представляет метод pop() . Он имеет две формы:
- pop(key) : удаляет элемент по ключу key и возвращает удаленный элемент. Если элемент с данным ключом отсутствует, то генерируется исключение KeyError
- pop(key, default) : удаляет элемент по ключу key и возвращает удаленный элемент. Если элемент с данным ключом отсутствует, то возвращается значение default
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >key = "+55555555" user = users.pop(key) print(user) # Alice user = users.pop("+4444444", "Unknown user") print(user) # Unknown user
Если необходимо удалить все элементы, то в этом случае можно воспользоваться методом clear() :
users.clear()
Копирование и объединение словарей
Метод copy() копирует содержимое словаря, возвращая новый словарь:
users = students = users.copy() print(students) #
Метод update() объединяет два словаря:
users = users2 = users.update(users2) print(users) # print(users2) #
При этом словарь users2 остается без изменений. Изменяется только словарь users, в который добавляются элементы другого словаря. Но если необходимо, чтобы оба исходных словаря были без изменений, а результатом объединения был какой-то третий словарь, то можно предварительно скопировать один словарь в другой:
users3 = users.copy() users3.update(users2)
Перебор словаря
Для перебора словаря можно воспользоваться циклом for:
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >for key in users: print(f"Phone: User: ")
При переборе элементов мы получаем ключ текущего элемента и по нему можем получить сам элемент.
Другой способ перебора элементов представляет использование метода items() :
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >for key, value in users.items(): print(f"Phone: User: ")
Метод items() возвращает набор кортежей. Каждый кортеж содержит ключ и значение элемента, которые при переборе мы тут же можем получить в переменные key и value.
Также существуют отдельно возможности перебора ключей и перебора значений. Для перебора ключей мы можем вызвать у словаря метод keys() :
for key in users.keys(): print(key)
Правда, этот способ перебора не имеет смысла, так как и без вызова метода keys() мы можем перебрать ключи, как было показано выше.
Для перебора только значений мы можем вызвать у словаря метод values() :
for value in users.values(): print(value)
Комплексные словари
Кроме простейших объектов типа чисел и строк словари также могут хранить и более сложные объекты — те же списки, кортежи или другие словари:
users = < "Tom": < "phone": "+971478745", "email": "tom12@gmail.com" >, "Bob": < "phone": "+876390444", "email": "bob@gmail.com", "skype": "bob123" >>
В данном случае значение каждого элемента словаря в свою очередь представляет отдельный словарь.
Для обращения к элементам вложенного словаря соответственно необходимо использовать два ключа:
old_email = users[«Tom»][«email»] users[«Tom»][«email»] = «supertom@gmail.com» print(users[«Tom»]) #
Но если мы попробуем получить значение по ключу, который отсутствует в словаре, Python сгенерирует исключение KeyError:
tom_skype = users["Tom"]["skype"] # KeyError
Чтобы избежать ошибки, можно проверять наличие ключа в словаре:
key = "skype" if key in users["Tom"]: print(users["Tom"]["skype"]) else: print("skype is not found")
Во всем остальном работа с комплексными и вложенными словарями аналогична работе с обычными словарями.
Python проверка наличия элемента в словаре, ошибка?
ругается «Для получения списка городов вызовите метод values()». Подскажите куда его нужно правильно вставить?
def is_anyone_in(collection, city): if city in friends.values(): # если есть среди значений словаря collection for name in friends: # переберите все ключи словаря if city == friends[name]: # если соответствующее ключу значение равно city print('В городе ' + city + ' живёт ' + name + '.') else: print('Пока никого.') friends = < 'Серёга': 'Омск', 'Соня': 'Москва', 'Дима': 'Челябинск', 'Алина': 'Хабаровск', 'Егор': 'Пермь' >is_anyone_in(friends, 'Хабаровск')
- Вопрос задан более трёх лет назад
- 2141 просмотр
3 комментария
Простой 3 комментария
Как проверить наличие ключа в словаре в Python
Проверка существования ключа в словаре Python является распространенной операцией, используемой во многих сценариях. Например, если вы попытаетесь получить доступ к несуществующему значению ключа через [] , то получите ошибку KeyError. Чтобы избежать этого, можно проверить существование ключа. Таким образом вы не только справитесь с этой ошибкой, но и предотвратите неожиданное поведение кода при выполнении любой операции над словарем.
В этом уроке мы рассмотрим четыре наиболее часто используемых способа проверки существования ключа в словаре на языке Python. Мы также рассмотрим синтаксис каждого метода и продемонстрируем их на примерах. Давайте начнем!
Техника 1. Оператор in
В Python оператор in вместе с if может быть использован для проверки наличия определенного ключа в словаре.
Оператор in в Python, в основном, используется для проверки на принадлежность. Он может проверить, содержится ли определенный элемент или значение в определенной последовательности, такой как список, кортеж, словарь и так далее.
Синтаксис:
if value in iterable:
Пример:
inp_dict = search_key = 'Ruby' if search_key in inp_dict: print("The key is present.") else: print("The key does not exist in the dictionary.") # Вывод: # The key is present.
Здесь мы использовали оператор if вместе с оператором in для проверки наличия или отсутствия заданного ключа ‘Ruby’ в нашем словаре. Кроме того, если необходимо проверить несколько ключей, вы можете реализовать цикл for .
Техника 2. Метод keys()
Встроенный в Python метод keys() может быть использован для проверки наличия ключа в существующем словаре.
Синтаксис:
dict.keys()
Метод keys() вызывается без аргументов и возвращает объект, представляющий собой список всех ключей, присутствующих в конкретном входном словаре.
Чтобы проверить, есть ли в словаре определенный ключ, вместе с методом keys() можно использовать оператор if . Таким образом мы сравним искомый ключ со списком ключей, возвращаемым методом keys() . Если ключ присутствует, выполнится инструкция в разделе if , в противном случае выполнится инструкция в разделе else .
Пример 1:
inp_dict = search_key = 'Ruby' if search_key in inp_dict.keys(): print("The key is present.") else: print("The key does not exist in the dictionary.") # Вывод: # The key is present.
Пример 2:
inp_dict = search_key = 'Cpp' if search_key in inp_dict.keys(): print("The key is present.") else: print("The key does not exist in the dictionary.") # Вывод: # The key does not exist in the dictionary.
Техника 3. Метод get()
Метод Python get() может быть использован для проверки наличия конкретного ключа в словаре.
Этот метода фактически возвращает значение, связанное с ключом, если ключ присутствует в словаре. В противном случае возвращается значение по умолчанию — None .
Синтаксис:
dict.get(key, default=None)
Мы передаем искомый ключ в качестве аргумента методу get() , и если нужного ключа в словаре нет, метод возвращает None , а если есть, то мы получим значение, хранимое в данном ключе.
Пример:
inp_dict = if inp_dict.get('Python')!=None: print("The key is present.") else: print("The key does not exist in the dictionary.") # Вывод: # The key is present.
Но будьте осторожны: если в словаре будет ключ, но со значением None , проверка все равно провалится. Для таких сценариев стоит использовать другое значение параметра по умолчанию, либо вообще выбрать другой метод проверки.
Техника 4. Метод has_key()
Примечание: метод has_keys() был исключен из Python версии 3 и выше.
Метод Python has_key() проверяет, имеется ли в dict определенный ключ. Если ключ в словаре есть, метод возвращает True, в противном случае — False.
Синтаксис:
dict.has_keys(key)
Пример:
inp_dict = search_key = 'Kotlin' if inp_dict.has_key(search_key): print("The key is present.") else: print("The key does not exist in the dictionary.") # Вывод: # The key is present.
Заключение
Словарь — это структура данных, которая содержит данные в виде пар ключ-значение. В этом учебном пособии мы на конкретных примерах рассмотрели несколько способов проверить, есть ли определенный ключ в словаре.
Мы проверяли с помощью оператора in , а также методов keys() , get() и has_key() . Каждый из подходов имеет свои преимущества и подходит для различных сценариев. Зная это, вы сможете эффективно проверять, существует ли ключ в словаре.