Как безопасно работать со словарями в Python и избежать KeyError
Словарь (или dict) в Python, одна из базовых и очень часто используемых структур, с которой мы обычно взаимодействуем также часто, как и с любимой кружечкой, из которой пьем кофе по утрам. :)
Мы используем их повсеместно: для работы с данными из API, хранения конфигураций и многого другого. Однако работа с отсутствующими ключами в словаре неожиданно может привести к исключению KeyError. В этой статье разберём, как безопасно извлекать значения из словаря, чтобы избежать подобных ошибок.
Обычно мы получаем значение по ключу через квадратные скобки, например так:
my_dict = {"key_1": "value_1", "key_2": "value_2"}
print(my_dict["key_1"])
>>> value_1Вопросов к этому способу нет, все работает как часы и мы всегда получаем ровно то что нам нужно.
Но что, если мы работаем с словарями, полученными из внешних источников, например, http запросов, и какое либо поле является опциональным, а нам в коде надо в зависимости от этого прописать какое-то условие? Мы можем поступить ровно также, используя квадратные скобки для сравнения значений:
if new_dict["key"] == "value":
print("ok!")
else:
print("no!")И это будет работать ровно до того момента, пока эта пара ключ-значение есть внутри словаря. Если же ключ не найдется, мы получим исключение KeyError:
new_dict = {"another_key": "another_value"}
if new_dict["key"] == "value":
print("ok!")
else:
print("no!")
>>> KeyError: 'key'Чтобы этого избежать, можно использовать встроенный метод словаря get():
new_dict = {"another_key": "another_value"}
# Проверяем ключ безопасно с помощью get()
if new_dict.get("key") == "value":
print("ok!")
else:
print("no!")
>>> no!Также можно просто проверить присутствие ключа в словаре, и в зависимости от этого уже выполнять какие-либо действия:
new_dict = {"another_key": "another_value"}
if new_dict.get("key"):
...Здесь мы просто проверяем объект на наличие.
По умолчанию для не найденных ключей метод get() подставляет значение `None.
Вместо None можно подставить любое необходимое значение:
new_dict = {"another_key": "another_value"}
# Используем значение по умолчанию для отсутствующего ключа
print(new_dict.get("key", "default_value"))
>>> default_valueМетоды, такие как get(), делают работу со словарями в Python более безопасной. Это особенно важно при работе с данными из внешних источников, где структура словаря может быть непредсказуемой. Используя эти подходы, вы не только избежите ошибок, но и сделаете ваш код более читаемым и устойчивым к неожиданным данным.