Как работать с вложенными словарями в Python?
У меня словарь, внутри которого тоже словари, например {'user1': {'age': 20, 'city': 'Москва'}}. Как доставать значения вглубь и безопасно обращаться, если какого-то ключа может не быть?
3 ответа
Доступ — просто цепочкой квадратных скобок:
data = {'user1': {'age': 20, 'city': 'Москва'}}
print(data['user1']['city']) # Москва
Но если любой ключ в цепочке может отсутствовать — обычный доступ упадёт с KeyError. Безопаснее через .get() с дефолтом-словарём, чтобы следующий .get() было к чему применить:
city = data.get('user1', {}).get('city', 'неизвестно')
Здесь если нет user1, вернётся пустой {}, и второй .get спокойно отдаст 'неизвестно' вместо ошибки. Для глубоко вложенных структур (JSON, конфиги) этот приём с .get(key, {}) на каждом уровне — самый ходовой.
Цепочкой ключей: data['a']['b']. Если ключа может не быть — data.get('a', {}).get('b').
Для создания вложенности на лету удобен defaultdict(dict) — не надо вручную заводить внутренние словари.