все Python 3Словари (dict)понятие
Вложенные словари
вложенность
Значения словаря могут быть любого типа, включая другие словари. Доступ через цепочку ключей.
Синтаксис
d[key1][key2] | d.get(k1, {}).get(k2)
Присваивание не создаёт промежуточные уровни: d['a']['b'] = 1 упадёт с KeyError, если ключа 'a' ещё нет, — сначала d.setdefault('a', {}) или collections.defaultdict. Цепочка d.get(k1, {}).get(k2) безопасна для чтения, но каждый вызов создаёт пустой словарь-заглушку. И помните, что d.copy() копирует только верхний уровень: вложенные словари останутся общими с оригиналом, для независимой копии нужен copy.deepcopy().
Примеры
user = {'name': 'Alice', 'address': {'city': 'Moscow', 'zip': '101000'}}
print(user['address']['city']) # → Moscow
user['address']['country'] = 'Russia'
print(user['address']) # → {'city': 'Moscow', 'zip': '101000', 'country': 'Russia'}
print(user.get('phone', {}).get('mobile', 'N/A')) # → N/A — безопасный доступ
db = {'alice': {'age': 30}, 'bob': {'age': 25}}
for name, info in db.items():
print(name, info['age']) # → alice 30 / bob 25
catalog = {}
catalog.setdefault('fruits', {})['apple'] = 1.5
catalog.setdefault('fruits', {})['banana'] = 0.8
print(catalog) # → {'fruits': {'apple': 1.5, 'banana': 0.8}}
config = {'db': {'host': 'localhost', 'port': 5432}, 'debug': True}
config['db']['host'] = '192.168.1.1'
print(config['db']) # → {'host': '192.168.1.1', 'port': 5432}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности