Вложенный словарь в Python

В Python словарь — это неупорядоченная коллекция элементов. Например:

dictionary = {'key' : 'value',
'key_2': 'value_2'}

Здесь словарь содержит пару key:value в фигурных скобках {}.

Подробнее о словарях: Словари (Dictionary) в Python.


Что такое вложенный словарь?

В Python вложенный словарь — это словарь внутри словаря. Это коллекция словарей, объединённая в один словарь.

nested_dict = { 'dictA': {'key_1': 'value_1'},
                'dictB': {'key_2': 'value_2'}}

Здесь nested_dict — вложенный словарь со словарями dictA и dictB. Это два словаря, каждый со своим ключом и значением.


Создание вложенного словаря

Создадим словарь людей внутри словаря.

Пример 1: Как создать вложенный словарь

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

print(people)

При запуске вывод:

{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

В этой программе people — вложенный словарь. Внутренние словари 1 и 2 присвоены people. Оба внутренних словаря имеют ключи name, age, sex с разными значениями.


Доступ к элементам вложенного словаря

Для доступа к элементам вложенного словаря используем синтаксис индексации [].

Пример 2: Доступ через []

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

print(people[1]['name'])
print(people[1]['age'])
print(people[1]['sex'])

Вывод:

John
27
Male

В программе мы выводим значение ключа name через people[1]['name'] из внутреннего словаря 1. Аналогично выводим значения age и sex.


Добавление элементов во вложенный словарь

Пример 3: Изменение или добавление элементов

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

people[3] = {}

people[3]['name'] = 'Luna'
people[3]['age'] = '24'
people[3]['sex'] = 'Female'
people[3]['married'] = 'No'

print(people[3])

Вывод:

{'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'}

Мы создаём пустой словарь 3 внутри people. Затем добавляем пары key:valuepeople[3]['name'] = 'Luna' и так далее. При выводе people[3] получаем пары ключ:значение словаря 3.

Пример 4: Добавление другого словаря в вложенный словарь

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'}}

people[4] = {'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}
print(people[4])

Вывод:

{'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}

Здесь мы присваиваем литерал словаря people[4]. Литерал имеет ключи name, age и sex со значениями. Затем выводим people[4], чтобы убедиться, что словарь 4 добавлен в people.


Удаление элементов из вложенного словаря

В Python используем оператор del для удаления элементов.

Пример 5: Удаление элементов

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Luna', 'age': '24', 'sex': 'Female', 'married': 'No'},
          4: {'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}}

del people[3]['married']
del people[4]['married']

print(people[3])
print(people[4])

Вывод:

{'name': 'Luna', 'age': '24', 'sex': 'Female'}
{'name': 'Peter', 'age': '29', 'sex': 'Male'}

В программе мы удаляем пары key:value married из внутренних словарей 3 и 4. Затем выводим people[3] и people[4] для подтверждения.

Пример 6: Удаление словаря из вложенного словаря

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Luna', 'age': '24', 'sex': 'Female'},
          4: {'name': 'Peter', 'age': '29', 'sex': 'Male'}}

del people[3], people[4]
print(people)

Вывод:

{1: {'name': 'John', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

Мы удаляем оба внутренних словаря 3 и 4 через del из вложенного словаря people.


Итерация по вложенному словарю

С помощью циклов for можно итерироваться по элементам вложенного словаря.

Пример 7: Итерация

people = {1: {'Name': 'John', 'Age': '27', 'Sex': 'Male'},
          2: {'Name': 'Marie', 'Age': '22', 'Sex': 'Female'}}

for p_id, p_info in people.items():
    print("\nPerson ID:", p_id)

    for key in p_info:
        print(key + ':', p_info[key])

Вывод:

Person ID: 1
Name: John
Age: 27
Sex: Male

Person ID: 2
Name: Marie
Age: 22
Sex: Female

Первый цикл возвращает все ключи вложенного словаря people — ID каждого человека. Эти ID используются для распаковки информации p_info. Второй цикл проходит по информации каждого человека, возвращая ключи name, age, sex.


Ключевые моменты

Примечание

  1. Вложенный словарь — неупорядоченная коллекция словарей.

  2. Срезы вложенного словаря невозможны.

  3. Вложенный словарь можно сужать и расширять по мере необходимости.

  4. Как и обычный словарь, имеет ключи и значения.

  5. Доступ к словарю осуществляется по ключу.

См. также: Dictionary Comprehension в Python.