← Все вопросы
Как получить доступ к значению в словаре безопасно, чтобы не получить ошибку KeyError?
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, его хватает надолго.
Ваш ответ
, чтобы ответить на вопрос.