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

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

Відкрита

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' був видалений)
2
Задача
Модуль 1: Python Core,  7 рівень,  6 лекція
Недоступна
Обхід словника.
Обхід словника.
2
Задача
Модуль 1: Python Core,  7 рівень,  6 лекція
Недоступна
У глибинах самих глибин.
У глибинах самих глибин.
Коментарі (9)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Дмитро
Рівень 31
12 квітня 2025, 06:44
Досі не виправили помилку з опитуванням "GIT"! Вже декілька місяців пройшло з першого коментаря Будь ласка зверніть увагу!
-_-
Рівень 61
14 березня 2025, 12:22
В темі з словниками стоїть опитування по git. Виправте помилку бо так не повинно бути PS Якщо у вас була задум що людина просто перейде на наступні лекції і все прочитає про git та потім повернеться назад то це поганий задум
negoda @poviranacze - Telegram в Python Intern (Train
20 липня 2025, 19:02
64 уровень, впервые вижу в комментариях человека который прошел полностью курс. Вы мой герой.
-_-
Рівень 61
6 серпня 2025, 03:59
Захочешь работать в айти сфере тоже будешь курсы полностью проходить). Правда javarush дает минимальную базу а потом нужно докупать книги и другие курсы что бы нормально понимать что к чему
Дмитро
Рівень 56
13 січня, 00:05
печально, а в рекламе утверждают что не джуна готовят а мидла
-_-
Рівень 61
14 січня, 09:39
Ну здесь по факту если курс по питону проходишь то и получаешь уровень джуна. Но вот как другой пример я проходил курс по SQL и там как по мне реальный уровень мидла. Так что здесь есть и часть правды
Dima Hrabenko
Рівень 7
Expert
11 січня 2025, 18:23
Щось наплутали з фінальним опитуванням по словникам!!!
Anonymous #3288173
Рівень 16
5 січня 2025, 15:11
Чому в 11рівні опитування по Git????🤨🤨🤨
Andriy Trubchanin
Рівень 23
15 лютого 2025, 19:54
+1 Я то пройшов, але незрозуміло чого він тут.