Вложенные словари

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Вложенные словари — это когда значением ключа в словаре является другой словарь. Такая структура часто встречается при работе с данными из API, конфигурационными файлами или когда нужно организовать сложные иерархические данные. Например, информация о пользователе может содержать вложенный словарь с адресом, а тот в свою очередь — ещё один словарь с координатами. Доступ к элементам осуществляется через цепочку квадратных скобок: data['user']['address']['city']. В этом тренажере ты научишься создавать вложенные словари, обращаться к элементам на разных уровнях вложенности, изменять их значения и безопасно получать данные с помощью метода get(). Также разберём типичные ошибки и способы перебора вложенных структур.

Список тем

Доступ к вложенному значению

id: 40025_task1

Перед вами словарь с информацией о студенте. Внутри него находится ещё один словарь с оценками по разным предметам. Проанализируйте код и определите, что будет выведено на экран.

Выберите правильный вариант ответа
student = {
    'name': 'Анна',
    'grades': {
        'math': 95,
        'physics': 88,
        'history': 92
    }
}

print(student['grades']['physics'])
Сообщения
Проверить
Показать подсказку

Извлечение данных из вложенной структуры

id: 40025_task2

Дан словарь с информацией о книге. Заполните пропуски так, чтобы вывести имя автора и год публикации.

Заполните пропуски
book = {
    'title': 'Война и мир',
    'author': {
        'first_name': 'Лев',
        'last_name': 'Толстой'
    },
    'publication': {
        'year': 1869,
        'city': 'Москва'
    }
}

# Выведет: Толстой
print(book[input1S][input2S])

# Выведет: 1869
print(book[input3S][input4S])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Три уровня вложенности

id: 40025_task3

В этом примере структура данных имеет три уровня вложенности. Проанализируйте код и напишите, что будет выведено на экран.

Что должно получиться?
company = {
    'departments': {
        'IT': {
            'manager': 'Иванов',
            'employees': 15
        },
        'HR': {
            'manager': 'Петрова',
            'employees': 5
        }
    }
}

print(company['departments']['IT']['manager'])
Сообщения
Проверить
Показать подсказку

Исправьте синтаксис доступа

id: 40025_task4

В коде допущена ошибка при обращении к вложенному словарю. Найдите строку с ошибкой и исправьте её так, чтобы код корректно вывел название города.

Найдите ошибку и исправьте
user = {
    'name': 'Мария',
    'address': {
        'city': 'Санкт-Петербург',
        'street': 'Невский проспект'
    }
}
 
print(user['address', 'city'])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Изменение значения во вложенном словаре

id: 40025_task5

Необходимо обновить цену товара в каталоге. Используйте элементы из банка токенов, чтобы изменить цену ноутбука с 75000 на 69999.

Нужно правильно расставить в пропуски предложенные варианты
catalog = {
    'electronics': {
        'laptop': {'name': 'ProBook', 'price': 75000},
        'phone': {'name': 'SmartX', 'price': 45000}
    }
}

# Изменяем цену ноутбука
catalog[input1S][input2S][input3S] = input4S

print(catalog['electronics']['laptop']['price'])
'electronics'
'laptop'
'price'
69999
'phone'
75000
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте выражения с результатами

id: 40025_task6

Дан вложенный словарь с данными о погоде. Сопоставьте выражения доступа слева с результатами, которые они вернут.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Вернёт словарь {'temp': 22, 'humidity': 65}
Вернёт число 22
Вернёт класс <class 'dict'>
Вернёт число 65
weather['today']['humidity']
weather['today']
type(weather['today'])
weather['today']['temp']
Сообщения
Проверить
Показать подсказку

Корректный доступ или ошибка?

id: 40025_task7

Дан словарь: config = {'db': {'host': 'localhost', 'port': 5432}, 'cache': {'enabled': True}}. Распределите выражения по категориям: те, что вернут значение без ошибки, и те, что вызовут KeyError.

Перетяните элементы в соответствующие блоки
Вернёт значение
Вызовет KeyError
config['db']['host']
config['db']['password']
config['cache']['enabled']
config['api']['key']
config['db']['port']
config['cache']['timeout']
Сообщения
Проверить
Показать подсказку

Безопасный доступ с методом get()

id: 40025_task8

Метод get() позволяет безопасно получать значения из словаря. Заполните пропуски так, чтобы безопасно извлечь значение из вложенного словаря, а при отсутствии ключа получить значение по умолчанию.

Заполните пропуски
settings = {
    'display': {
        'brightness': 80,
        'contrast': 50
    }
}

# Безопасно получаем brightness (результат: 80)
brightness = settings.get(input1S, {}).get(input2S, 0)

# Безопасно получаем несуществующий volume (результат: 100)
volume = settings.get('audio', input3S).get('volume', input4S)

print(brightness, volume)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Добавление нового элемента во вложенную структуру

id: 40025_task9

Соберите код, который создаёт словарь с товаром, добавляет в него вложенный словарь с информацией о скидке, а затем выводит процент скидки. Одна строка лишняя.

Перетяните в правильном порядке строки из одного блока в другой
product['discount'] = {'percent': 15, 'until': '2024-12-31'}
product = {'name': 'Кроссовки', 'price': 5000}
print(product['discount']['percent'])
print(product['discount'])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Перебор вложенного словаря в цикле

id: 40025_task10

Код перебирает вложенный словарь и выводит информацию о каждом студенте. Определите, что будет выведено на экран.

Выберите правильный вариант ответа
students = {
    'id001': {'name': 'Алексей', 'grade': 4},
    'id002': {'name': 'Мария', 'grade': 5}
}

for student_id, info in students.items():
    if info['grade'] == 5:
        print(info['name'])
Сообщения
Проверить
Показать подсказку

Подсчёт суммы во вложенной структуре

id: 40025_task11

Код подсчитывает общую стоимость всех товаров в корзине. Каждый товар представлен вложенным словарём с ценой и количеством. Введите итоговую сумму.

Что должно получиться?
cart = {
    'apple': {'price': 50, 'quantity': 3},
    'bread': {'price': 40, 'quantity': 2},
    'milk': {'price': 80, 'quantity': 1}
}

total = 0
for item in cart.values():
    total += item['price'] * item['quantity']

print(total)
Сообщения
Проверить
Показать подсказку

Исправьте ошибки в работе со вложенным словарём

id: 40025_task12

В коде две ошибки при работе со вложенным словарём. Найдите и исправьте обе строки, чтобы код корректно обновил email пользователя и вывел его.

Найдите ошибку и исправьте
user = {
    'id': 1,
    'profile': {
        'name': 'Иван',
        'contacts': {
            'email': 'old@mail.ru',
            'phone': '+7999'
        }
    }
}
 
user['profile']['contacts'].email = 'new@mail.ru'
 
print(user['profile']['contact']['email'])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Построение вложенной структуры по шагам

id: 40025_task13

Расположите строки кода в правильном порядке, чтобы создать словарь с вложенной структурой, добавить в неё данные и вывести результат. Код должен вывести число 25.

Расставьте строки в правильном порядке
data['users'] = {}
print(data['users']['admin']['age'])
data['users']['admin'] = {}
data = {}
data['users']['admin']['age'] = 25
Сообщения
Проверить
Показать подсказку

Изменение вложенного словаря через переменную

id: 40025_task14

Интересный момент: при присваивании вложенного словаря переменной, изменения через эту переменную затронут исходный словарь. Что выведет этот код?

Выберите правильный вариант ответа
original = {
    'settings': {
        'volume': 50
    }
}

ref = original['settings']
ref['volume'] = 100

print(original['settings']['volume'])
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру