← Все вопросы

Как получить доступ к значению в словаре безопасно, чтобы не получить ошибку KeyError?

Задан 2 месяца назад21 просмотров1 ответ
1

Объясните разницу между обращением dict["key"] и dict.get("key"). В каких ситуациях вы используете .get()? Как работает метод .setdefault()?

1 ответ

3

d["key"] — жёсткое обращение: ключа нет — получите KeyError и остановку программы. d.get("key") — мягкое: вернёт None, а со вторым аргументом — то, что скажете: d.get("key", 0).

Выбор зависит от того, что означает отсутствие ключа:

  • отсутствие — штатная ситуация (разбираете JSON от чужого API, у части записей поля просто нет) — берите .get() с внятным умолчанием;
  • отсутствие — ошибка в логике (ключ обязан быть) — квадратные скобки. Пусть падает громко и сразу: это лучше, чем None тихо поползёт по программе и выстрелит через три функции.

setdefault — это get с побочным действием: если ключа нет, он создаст его с указанным значением и вернёт. Классика — группировка:

groups = {}
for word in words:
    groups.setdefault(word[0], []).append(word)

Ещё есть проверка if "key" in d: для случаев, когда само значение не нужно, и collections.defaultdict — когда умолчание нужно постоянно. Но начните с get, его хватает надолго.

Ваш ответ

, чтобы ответить на вопрос.