# Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)

В этом учебнике вы узнаете, как использовать Python для проверки существования ключа в словаре. Вы также узнаете, как проверить, существует ли значение в словаре. Вы узнаете, как это сделать с помощью оператора in, метода `.get()`, функции `has_key()` и методов `.keys()` и `.values()`.

Умение работать со словарями **Python** — это важный навык. Это может быть особенно полезно при работе с веб-API, которые возвращают данные в формате **JSON**.

Хотя мы можем легко индексировать словарь, если ключ не существует, будет выброшено исключение <mark style="color:orange;">**KeyError**</mark>. Это вызовет значительные проблемы в вашей программе, если эти ошибки не будут обработаны.

Гораздо более безопасной альтернативой индексации словаря является предварительная проверка существования данного ключа в словаре. Давайте начнем обучение!

#### Содержание

* [Что такое словарь Python?](#chto-takoe-slovar-python)
* [Проблема с индексацией словаря Python](#problema-s-indeksaciei-slovarya-python)
* [Использование Python для проверки существования ключа: метод `keys`](#ispolzovanie-python-dlya-proverki-sushestvovaniya-klyucha-metod-keys)
* [Использование Python для проверки существования ключа: оператор `in`](#ispolzovanie-python-dlya-proverki-sushestvovaniya-klyucha-operator-in)
* [Использование метода `.get()` для проверки существования ключа в словаре Python](#ispolzovanie-metoda-.get-dlya-proverki-sushestvovaniya-klyucha-v-slovare-python)
* [Проверка существования значения в словаре Python с использованием `.values()`](#proverka-sushestvovaniya-znacheniya-v-slovare-python-s-ispolzovaniem-.values)
* [Заключение](#zaklyuchenie)

### Что такое словарь Python?

<mark style="color:blue;">**Словари в Python**</mark> — это одна из основных встроенных структур данных. Они состоят из пар ключ:значение, что делает поиск значения элемента простым, если известен соответствующий ключ. Одним из уникальных атрибутов словаря является то, что ключи должны быть уникальными, но значения могут дублироваться.

Давайте посмотрим, как выглядят словари в Python. Они создаются с использованием фигурных скобок `{}` и пары ключ:значение разделяются запятыми.

Давайте создадим словарь под названием `ages`, который будет содержать возраст разных людей:

```python
ages = {
    'Matt': 30,
    'Katie': 29,
    'Nik': 31,
    'Jack': 43,
    'Alison': 32,
    'Kevin': 38
}
```

Один из способов, которым вас часто учат доступать к значению словаря, — это использование индексации через доступ с помощью квадратных скобок `[]`. В следующем разделе вы увидите, как работает индексация словаря и почему это не всегда лучший вариант. После этого вы узнаете различные методы обеспечения существования ключа.

### Проблема с индексацией словаря Python

_**Индексация словаря**_ — это простой способ получения значения ключа словаря, если данный ключ существует в словаре. Давайте посмотрим, как работает индексация словаря. Мы будем использовать индексацию словаря для получения значения ключа `Nik` из нашего словаря `ages`:

```python
>>> ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}
>>> print(ages['Nik'])

31
```

Мы видим, что это сработало прекрасно. Тем не менее, давайте попробуем получить значение для ключа `Jill`, которого нет в словаре:

```python
>>> ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}
>>> print(ages['Jill'])

KeyError: 'Jill'
```

Мы видим, что если мы пытаемся получить значение словаря для ключа, которого нет, выбрасывается исключение <mark style="color:orange;">**KeyError**</mark>. Это имеет серьезные последствия для вашего кода. Если ошибка не будет явно обработана, программа завершится сбоем. Один из способов избежать <mark style="color:orange;">**KeyError**</mark> — это убедиться, что ключ действительно существует в словаре Python.

Именно это вы узнаете в следующих разделах. Давайте начнем!

### Использование Python для проверки существования ключа: метод `keys`

Словари Python имеют встроенный метод, который позволяет нам генерировать объект, похожий на список, содержащий все ключи в словаре. Удобно, что этот метод называется `.keys()`.

Вывод `dict.keys(`) выглядит так:

```python
print(ages.keys())
# Возвращает: dict_keys(['Matt', 'Katie', 'Nik', 'Jack', 'Alison', 'Kevin'])
```

Мы видим, что это выглядит немного как список. Теперь мы можем проверить, существует ли ключ в этом объекте, похожем на список!

Давайте посмотрим, как мы можем использовать метод `.keys()`, чтобы проверить, существует ли ключ в словаре. Давайте использовать этот метод, чтобы проверить, существует ли ключ:

```python
# Проверка существования ключа в словаре Python путем проверки всех ключей
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

some_key = 'James'
if some_key in ages.keys():
    print('Ключ существует')
else:
    print('Ключ не существует')

# Возвращает: Ключ не существует
```

Мы видим, что мы проверяем, существует ли предоставленный ключ `some_key` в ключах нашего словаря. В этом случае ключ не существовал, и программа вывела _**"Ключ не существует".**_

В следующем разделе вы узнаете, как упростить это еще больше!

### Использование Python для проверки существования ключа: оператор `in`

Метод выше работает хорошо, но мы можем упростить проверку существования данного ключа в словаре Python еще больше. Мы можем полностью опустить метод `.keys()` и использовать оператор `in`, который будет проверять все ключи в словаре.

Давайте посмотрим, как это работает на практике:

```python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

some_key = 'Nik'
if some_key in ages:
    print('Ключ существует')
else:
    print('Ключ не существует')

# Возвращает: Ключ существует
```

Мы видим, что наш метод выглядит очень похоже на предыдущий, но мы смогли полностью исключить метод `.keys()`! Это действительно помогает коду читаться более естественно.

В следующем разделе вы узнаете, как фактически получить значение ключа, даже если ключ не существует!

### Использование метода `.get()` для проверки существования ключа в словаре Python

Работа со словарями в Python обычно включает получение значения ключа, а не только проверку его существования. Вы узнали ранее, что простая индексация словаря вызовет исключение KeyError, если ключ не существует. Как мы можем сделать это безопасно, не нарушая работу программы?

Ответ на это — использовать метод Python `.get()`. Метод `.get()` просто вернет <mark style="color:purple;">**None**</mark>, если ключ не существует. Давайте попробуем:

```python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

print(ages.get('Jack'))
print(ages.get('Jill'))

# Возвращает:
# 43
# None
```

Мы видим, что когда метод `.get()` применяется для возврата существующего ключа, значение этого ключа возвращается правильно. Когда ключ не существует, программа продолжает работать, но возвращает <mark style="color:purple;">**None**</mark>.

Особенно полезной особенностью метода Python `.get()` является то, что он позволяет нам вернуть значение, даже если ключ не существует.

Предположим, мы хотим, чтобы наша программа уведомляла нас, что ключ не существует. Мы могли бы попросить метод `.get()` вернуть _**"Ключ не существует!"**_.

Давайте посмотрим, как это можно сделать:

```python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

print(ages.get('Jill', "Ключ не существует!"))

# Возвращает: "Ключ не существует!"
```

Метод `.get()` — это отличный и безопасный способ проверить, существует ли ключ в словаре Python. Теперь давайте узнаем, как проверить, существует ли данное значение в словаре Python.

### Проверка существования значения в словаре Python с использованием `.values()`

Подобно методу `.keys()` словаря Python, у словарей есть соответствующий метод `.values(),` который возвращает объект, похожий на список, содержащий все значения в словаре.

Давайте посмотрим, как мы можем получить доступ ко всем значениям словаря:

```python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

print(ages.values())
# Возвращает: dict_values([30, 29, 31, 43, 32, 38])
```

Мы можем использовать это, чтобы проверить, существует ли данное значение. Предположим, мы хотим узнать, существует ли возраст **27** в нашем словаре, мы могли бы написать следующее:

```python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Alison': 32, 'Kevin': 38}

some_age = 27

if some_age in ages.values():
    print('Возраст существует!')
else:
    print("Возраст не существует!")

# Возвращает: Возраст не существует!
```

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

* Быть пустым списком, если значение не существует,
* Иметь один элемент, если значение существует один раз
* Иметь более одного элемента, если значение существует более одного раза

Давайте использовать немного измененный словарь, чтобы увидеть это в действии:

```python
# Получение всех ключей определенного значения в словаре Python
ages = {'Matt': 30, 'Katie': 29, 'Nik': 31, 'Jack': 43, 'Jill': 43, 'Alison': 32, 'Kevin': 38}

value_43 = [key for key, value in ages.items() if value == 43]

print(value_43)

# Возвращает: ['Jack', 'Jill']
```

Мы создали генератор списка, который добавляет каждый ключ, если значение этого ключа равно **43**.

Что такое генераторы списков Python? Чтобы узнать больше о генераторах списков, ознакомьтесь с моим подробным учебником здесь и моим глубоким видео ниже!

### Заключение

В этой статье вы узнали, как проверить, существует ли ключ в словаре Python. Вы узнали, как это сделать с помощью метода `.keys(),` оператора in и метода `.get()`. Вы также узнали, как проверить, существует ли данное значение в словаре Python и как получить ключ(и) этого значения.

Чтобы узнать больше о словарях в Python, ознакомьтесь с официальной документацией [здесь](https://docs.python.org/3/tutorial/datastructures.html#dictionaries).
