Есть словарь user = {"id": 7}. Поле "profile" может отсутствовать, а если присутствует, возраст лежит в user["profile"]["age"]. Как безопасно получить возраст без KeyError, чтобы при отсутствии вернулось None?

Auser.get('profile', {}).get('age'): при отсутствии profile берётся пустой словарь и далее .get
Buser['profile'].get('age'): обращение по ключу profile через прямую индексацию словаря
Cuser.get('profile').get('age'): цепочка из двух .get без подстраховки на промежуточном шаге
Duser['age']: чтение возраста напрямую из корня словаря по одному ключу
Правильный ответ. Берите промежуточный словарь через .get(key, {}), а затем уже доставайте вложенное значение.

Разбор

Если "profile" отсутствует, то user.get("profile", {}) вернёт пустой словарь, и .get("age") у него вернёт None без исключения. Вариант user.get("profile").get("age") опасен: при отсутствии ключа .get("profile") вернёт None, а у None нет метода .get(). Прямое обращение user["profile"] даст KeyError, а user["age"] ищет возраст не там.

Проверь себя · 1/3разбор после ответа
Есть список названий кампаний campaigns с повторами. Нужно получить список уникальных кампаний в отсортированном виде. Какой вариант корректен?
Тренировать Python в Telegram

Ещё вопросы по теме «Коллекции и структуры данных»