JavaRush /Курси /Модуль 1: Python Core /Вкладені словники

Вкладені словники

Модуль 1: Python Core
Рівень 7 , Лекція 6
Відкрита

7.1 Створення вкладених словників

Вкладені словники — це дуже зручний спосіб опису складної структури даних, з яким ти будеш стикатися дуже часто. Давай трохи попрактикуємося в їх створенні.

Створення вкладених словників

Ось приклад створення вкладеного словника:


person = {
    "name": "Alice",
    "details": {
        "age": 25,
        "city": "New York",
        "address": {
            "street": "123 Main St",
            "zip": "10001"
        },
        "mother": "Jane Smith"
    },
    "gender": "female"
}
print(person)  # Вивід: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}

У цьому прикладі person — це словник, що містить вкладений словник details, який, у свою чергу, містить інший вкладений словник address.

Вкладений словник можна створити і з шматочків:


address = {
    "street": "123 Main St",
    "zip": "10001"
}
         
details = {
    "age": 25,
    "city": "New York",
    "address": address
}
         
person = {
    "name": "Alice",
    "details": details,
    "gender": "female"
}
print(person)  # Вивід: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}

7.2 Доступ до елементів вкладеного словника

Доступ до елементів вкладених словників простий і очевидний. Ось як це робиться:

Доступ до елементів верхнього рівня


name = person["name"]
print(name)  # Вивід: Alice

Доступ до елементів вкладеного словника


age = person["details"]["age"]
city = person["details"]["city"]
print(age)  # Вивід: 25
print(city)  # Вивід: New York

Доступ до елементів глибшого рівня вкладеності


street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street)  # Вивід: 123 Main St
print(zip_code)  # Вивід: 10001

7.3 Зміна елементів вкладеного словника

Якщо ти вже розібрався, як виводити елементи будь-якого ступеня вкладеності, то зміна їх буде ще простішою:

Зміна значень верхнього рівня


person["name"] = "Bob"
print(person["name"])  # Вивід: Bob

Зміна значень вкладеного словника


person["details"]["age"] = 26
print(person["details"]["age"])  # Вивід: 26

Зміна значень глибшого рівня вкладеності


person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"])  # Вивід: Los Angeles

Додавання нових елементів до вкладеного словника


person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"])  # Вивід: 123-456-7890

Видалення елементів верхнього рівня


# Видаляємо елемент 'country' зі словника 'person'
del person["country"]
print(person)  # Елемент 'country' буде видалено зі словника

Видалення елементів з вкладеного словника


# Видаляємо елемент 'phone' зі словника 'details'
del person["details"]["phone"]
print(person["details"])  # Елемент 'phone' буде видалено зі словника 'details'

7.4 Обхід вкладених словників

Існує декілька способів обійти всі елементи словника. Цикли – найпростіший з них:

Ітерація по елементах вкладеного словника


for key, value in person.items():  # Обходимо батьківський словник
    if isinstance(value, dict):  # Якщо значення - це словник
        for key2, value2 in value.items():  # Обходимо елементи дочірнього словника
            print(f"{key} --> {key2}: {value2}")

Рекурсивна ітерація по всіх рівнях вкладеності


def print_dict(d, indent=0):
    for key, value in d.items():
        print("  " * indent + str(key) + ": ", end="")
        if isinstance(value, dict):
            print()
            print_dict(value, indent + 1)
        else:
            print(value)
        
print_dict(person)

Докладніше про рекурсію ти дізнаєшся в темі «Алгоритми та Структури даних».

До речі, рекурсію зручно використовувати для пошуку значення глибоко у вкладених словниках. Ось приклад:


def find_key(d, key):
    if key in d:
        return d[key]
    for k, v in d.items():
        if isinstance(v, dict):
            result = find_key(v, key)
            if result:
                return result
    return None
        
phone = find_key(person, "phone")
print(phone)  # Вивід: None (оскільки елемент 'phone' був видалений)
Коментарі (9)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Дмитро Рівень 31
12 квітня 2025
Досі не виправили помилку з опитуванням "GIT"! Вже декілька місяців пройшло з першого коментаря Будь ласка зверніть увагу!
-_- Рівень 18
14 березня 2025
В темі з словниками стоїть опитування по git. Виправте помилку бо так не повинно бути PS Якщо у вас була задум що людина просто перейде на наступні лекції і все прочитає про git та потім повернеться назад то це поганий задум
negoda Рівень 31
20 липня 2025
64 уровень, впервые вижу в комментариях человека который прошел полностью курс. Вы мой герой.
-_- Рівень 18
6 серпня 2025
Захочешь работать в айти сфере тоже будешь курсы полностью проходить). Правда javarush дает минимальную базу а потом нужно докупать книги и другие курсы что бы нормально понимать что к чему
Дмитро Рівень 12
13 січня 2026
печально, а в рекламе утверждают что не джуна готовят а мидла
-_- Рівень 18
14 січня 2026
Ну здесь по факту если курс по питону проходишь то и получаешь уровень джуна. Но вот как другой пример я проходил курс по SQL и там как по мне реальный уровень мидла. Так что здесь есть и часть правды
Dima Hrabenko Рівень 7 Expert
11 січня 2025
Щось наплутали з фінальним опитуванням по словникам!!!
Anonymous #3288173 Рівень 16
5 січня 2025
Чому в 11рівні опитування по Git????🤨🤨🤨
Andriy Trubchanin Рівень 23
15 лютого 2025
+1 Я то пройшов, але незрозуміло чого він тут.