Словарь (dict) — это неупорядоченная структура данных в языке программирования Python, которая имеет вид «ключ — значение».
То есть любое значение, находящееся внутри словаря, извлекается с помощью явного указания ключа, который соответствует искомому значению. Обращение же к несуществующему ключу нарушает логику работы программы.
По этой причине необходимо выполнять проверку наличия ключа в словаре Python перед непосредственным обращением к его значению.
Язык программирования Python имеет множество встроенных методов для выполнения проверки наличия ключа в словаре, которые мы и рассмотрим в этой статье.
В этом руководстве используется интерпретатор Python версии 3.10.12, запущенный на операционной системе Ubuntu 22.04.
Оператор in + dict
Чаще всего, чтобы узнать, есть ли в словаре ключ, используется оператор in, обернутый в условие if/else:
Таким образом оператор in возвращает True, если ключ найден, или False, если указанного ключа нет.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Оператор in + dict.keys()
Оператор in можно использовать не со словарем напрямую, а со списком его ключей, полученным с помощью функции dict.keys():
Как видно, логика кода ничем не отличается от предыдущего примера, за исключением использования функции dict.keys() вместо экземпляра dict.
На первый взгляд такой подход может показаться бессмысленным. Однако в реальных программах могут возникать ситуации, когда необходимо обращение к именно к списку ключей словаря, а не к самому словарю.
Таким образом можно в очень лаконичной форме определить вхождение указанного ключа в словарь.
Функция dict.get()
Проверить наличие элемента в словаре можно, попытавшись извлечь его с помощью встроенного метода dict.get():
Как видно, обращение к несуществующему ключу через функцию dict.get(), в отличие от классических квадратных скобок, не вызовет ошибку, а лишь вернет пустое значение.
Однако, у этого способа есть недостаток. Может оказаться, что запрашиваемый ключ на самом деле существует внутри словаря, но его значение равно None:
Этот недостаток можно решить с помощью особенности метода dict.get() — возможности установить значение по умолчанию для несуществующего элемента.
В этом примере консольный вывод будет следующим:
При этом если выполнять извлечение значения несуществующего ключа через квадратные скобки, то однозначно будет получена ошибка. В перспективе такую ошибку можно обработать с помощью исключения try/except, тем самым определив реальное существование ключа.
Исключение try/except
Проверить, существует ли ключ в словаре, можно с помощью обработки ошибок try/except — так сказать, прямо в «в лоб».
То есть, если при обращении к ключу возникает ошибка, значит, такого ключа нет, а если не возникает — значит, ключ есть.
Для реализации этого способа нужно обернуть обращение по ключу в блок обработки исключения try/except:
Такой способ проверки значения в словаре Python лучше всего использовать как запасной — в том случае, если любые другие способы не подходят.
Дело в том, что обработка исключений в языке программирования Python работает достаточно медленно, тем самым снижая производительность программы.
Тем не менее, проверка ключа через исключение try/except имеет право на существование.
Цикл for
В программах со сложной логикой может потребоваться явный поиск ключа в словаре. Особенно если такой поиск необходимо выполнить одновременно с изменением найденных значений.
В этом случае можно прибегнуть к ручному перебору словаря с помощью цикла for:
В этом примере все ключи словаря последовательно перебираются вручную, после чего изменяется само значение найденного ключа.
Таким образом можно писать более сложную логику, комбинируя и поиск ключа, и изменение его значения.
Цикл while
В некоторых случаях может быть полезно использовать цикл while вместо цикла for:
В этом случае общая логика приложения не меняется, но синтаксическая разница есть.
Разворачивайте проекты на Python
в облаке Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Перед доступом к значению словаря необходимо убедиться, есть ли искомый элемент в этом самом словаре. В противном случае можно получить ошибку и вызвать сбой программы.
Выполнить такую проверку можно с помощью нескольких встроенных методов:
- Оператор
in - Функция
dict.get() - Исключение
try/except - Циклы
forиwhile
Каждый конкретный случай требует своего способа проверки. В самом простом варианте используется оператор in. Когда логика приложения более сложная и требует выполнения дополнительных действий — задействуется цикл for или while.
