Как проверить наличие ключа в словаре Python: инструкция

    Команда Simple-Server
    03.06.2026
    6 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Чаще всего, чтобы узнать, есть ли в словаре ключ, используется оператор in, обернутый в условие if/else:

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'name' if some_key in some_dict: print('Ключ ' + some_key + ' удалось найти') else: print('Ключ ' + some_key + ' не удалось найти')

    Таким образом оператор in возвращает True, если ключ найден, или False, если указанного ключа нет.**
    **

    Оператор in + dict.keys()

    Оператор in можно использовать не со словарем напрямую, а со списком его ключей, полученным с помощью функции dict.keys():

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'name' if some_key in some_dict.keys(): print('Ключ ' + some_key + ' удалось найти') else: print('Ключ ' + some_key + ' не удалось найти')

    Как видно, логика кода ничем не отличается от предыдущего примера, за исключением использования функции dict.keys() вместо экземпляра dict.

    На первый взгляд такой подход может показаться бессмысленным. Однако в реальных программах могут возникать ситуации, когда необходимо обращение к именно к списку ключей словаря, а не к самому словарю.

    Таким образом можно в очень лаконичной форме определить вхождение указанного ключа в словарь.**
    **

    Проверить наличие элемента в словаре можно, попытавшись извлечь его с помощью встроенного метода dict.get():

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'salary' some_value = some_dict.get(some_key) # выполняем извлечение значения по ключу # если вернувшееся значение равно None, то можно сделать вывод, что такого ключа еще не существует if some_value is not None: print('Ключ ' + some_key + ' удалось найти и его значение равно "' + str(some_value) + '"') else: print('Ключ ' + some_key + ' не удалось найти')

    Как видно, обращение к несуществующему ключу через функцию dict.get(), в отличие от классических квадратных скобок, не вызовет ошибку, а лишь вернет пустое значение.

    Однако, у этого способа есть недостаток. Может оказаться, что запрашиваемый ключ на самом деле существует внутри словаря, но его значение равно None:

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...', 'salary': None} some_key = 'salary' # запрашиваем ключ, значение которого изначально существует, но является пустым some_value = some_dict.get(some_key) # получаем None и не можем понять, ключ не существует, или существует, но с пустым значением print('Неизвестно, существует ли ключ ' + some_key + ' на самом деле')

    Этот недостаток можно решить с помощью особенности метода dict.get() — возможности установить значение по умолчанию для несуществующего элемента.

    some_dict1 = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...', 'salary': None} some_dict2 = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'salary' some_value1 = some_dict1.get(some_key, "Зарплата не предусмотрена") some_value2 = some_dict2.get(some_key, "Зарплата не предусмотрена") print('При попытке доступа к ключу ' + some_key + ' получено значение "' + str(some_value1) + '"') print('При попытке доступа к ключу ' + some_key + ' получено значение "' + str(some_value2) + '"')

    В этом примере консольный вывод будет следующим:

    При попытке доступа к ключу salary получено значение "None" При попытке доступа к ключу salary получено значение "Зарплата не предусмотрена"

    При этом если выполнять извлечение значения несуществующего ключа через квадратные скобки, то однозначно будет получена ошибка. В перспективе такую ошибку можно обработать с помощью исключения try/except, тем самым определив реальное существование ключа.

    Проверить, существует ли ключ в словаре, можно с помощью обработки ошибок try/except — так сказать, прямо в «в лоб».

    То есть, если при обращении к ключу возникает ошибка, значит, такого ключа нет, а если не возникает — значит, ключ есть.

    Для реализации этого способа нужно обернуть обращение по ключу в блок обработки исключения try/except:

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'name' try: some_value = some_dict[some_key] print('Ключ ' + some_key + ' удалось найти и его значение равно ' + some_value) except some_error: print('Ключ ' + some_key + ' не удалось найти')

    Такой способ проверки значения в словаре Python лучше всего использовать как запасной — в том случае, если любые другие способы не подходят.

    Дело в том, что обработка исключений в языке программирования Python работает достаточно медленно, тем самым снижая производительность программы.

    Тем не менее, проверка ключа через исключение try/except имеет право на существование.

    В программах со сложной логикой может потребоваться явный поиск ключа в словаре. Особенно если такой поиск необходимо выполнить одновременно с изменением найденных значений.

    В этом случае можно прибегнуть к ручному перебору словаря с помощью цикла for:

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'name' isFound = False # переменная для хранения статуса поиска # перебираем словарь for found_key in some_dict: if found_key == some_key: isFound = True some_dict[found_key] = 'Витя' # изменяем найденное значение if isFound: print('Ключ ' + some_key + ' удалось найти и его значение равно "' + some_dict[some_key] + '"') else: print('Ключ ' + some_key + ' не удалось найти')

    В этом примере все ключи словаря последовательно перебираются вручную, после чего изменяется само значение найденного ключа.

    Таким образом можно писать более сложную логику, комбинируя и поиск ключа, и изменение его значения.

    В некоторых случаях может быть полезно использовать цикл while вместо цикла for:

    some_dict = {'name': 'Виктор', 'age': 35, 'occupation': 'Just a guy...'} some_key = 'occupation' isFound = False some_keys = list(some_dict); # конвертируем ключи словаря в список i = 0 while i < len(some_keys): if some_keys[i] == some_key: isFound = True some_dict[some_key] = 'Витя' break i += 1 if isFound: print('Ключ ' + some_key + ' удалось найти и его значение равно "' + some_dict[some_key] + '"') else: print('Ключ ' + some_key + ' не удалось найти')

    В этом случае общая логика приложения не меняется, но синтаксическая разница есть.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны