Вложенные словари — это когда значением ключа в словаре является другой словарь. Такая структура часто встречается при работе с данными из API, конфигурационными файлами или когда нужно организовать сложные иерархические данные. Например, информация о пользователе может содержать вложенный словарь с адресом, а тот в свою очередь — ещё один словарь с координатами. Доступ к элементам осуществляется через цепочку квадратных скобок: data['user']['address']['city']. В этом тренажере ты научишься создавать вложенные словари, обращаться к элементам на разных уровнях вложенности, изменять их значения и безопасно получать данные с помощью метода get(). Также разберём типичные ошибки и способы перебора вложенных структур.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Доступ к вложенному значению
Перед вами словарь с информацией о студенте. Внутри него находится ещё один словарь с оценками по разным предметам. Проанализируйте код и определите, что будет выведено на экран.
student = {
'name': 'Анна',
'grades': {
'math': 95,
'physics': 88,
'history': 92
}
}
print(student['grades']['physics'])Извлечение данных из вложенной структуры
Дан словарь с информацией о книге. Заполните пропуски так, чтобы вывести имя автора и год публикации.
book = {
'title': 'Война и мир',
'author': {
'first_name': 'Лев',
'last_name': 'Толстой'
},
'publication': {
'year': 1869,
'city': 'Москва'
}
}
# Выведет: Толстой
print(book[input1S][input2S])
# Выведет: 1869
print(book[input3S][input4S])Три уровня вложенности
В этом примере структура данных имеет три уровня вложенности. Проанализируйте код и напишите, что будет выведено на экран.
company = {
'departments': {
'IT': {
'manager': 'Иванов',
'employees': 15
},
'HR': {
'manager': 'Петрова',
'employees': 5
}
}
}
print(company['departments']['IT']['manager'])Исправьте синтаксис доступа
В коде допущена ошибка при обращении к вложенному словарю. Найдите строку с ошибкой и исправьте её так, чтобы код корректно вывел название города.
user = { 'name': 'Мария', 'address': { 'city': 'Санкт-Петербург', 'street': 'Невский проспект' }} print(user['address', 'city'])Изменение значения во вложенном словаре
Необходимо обновить цену товара в каталоге. Используйте элементы из банка токенов, чтобы изменить цену ноутбука с 75000 на 69999.
catalog = {
'electronics': {
'laptop': {'name': 'ProBook', 'price': 75000},
'phone': {'name': 'SmartX', 'price': 45000}
}
}
# Изменяем цену ноутбука
catalog[input1S][input2S][input3S] = input4S
print(catalog['electronics']['laptop']['price'])Сопоставьте выражения с результатами
Дан вложенный словарь с данными о погоде. Сопоставьте выражения доступа слева с результатами, которые они вернут.
weather['today']['humidity']weather['today']type(weather['today'])weather['today']['temp']Корректный доступ или ошибка?
Дан словарь: config = {'db': {'host': 'localhost', 'port': 5432}, 'cache': {'enabled': True}}. Распределите выражения по категориям: те, что вернут значение без ошибки, и те, что вызовут KeyError.
config['db']['host']config['db']['password']config['cache']['enabled']config['api']['key']config['db']['port']config['cache']['timeout']Безопасный доступ с методом get()
Метод 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)Добавление нового элемента во вложенную структуру
Соберите код, который создаёт словарь с товаром, добавляет в него вложенный словарь с информацией о скидке, а затем выводит процент скидки. Одна строка лишняя.
product['discount'] = {'percent': 15, 'until': '2024-12-31'}product = {'name': 'Кроссовки', 'price': 5000}print(product['discount']['percent'])print(product['discount'])Перебор вложенного словаря в цикле
Код перебирает вложенный словарь и выводит информацию о каждом студенте. Определите, что будет выведено на экран.
students = {
'id001': {'name': 'Алексей', 'grade': 4},
'id002': {'name': 'Мария', 'grade': 5}
}
for student_id, info in students.items():
if info['grade'] == 5:
print(info['name'])Подсчёт суммы во вложенной структуре
Код подсчитывает общую стоимость всех товаров в корзине. Каждый товар представлен вложенным словарём с ценой и количеством. Введите итоговую сумму.
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)Исправьте ошибки в работе со вложенным словарём
В коде две ошибки при работе со вложенным словарём. Найдите и исправьте обе строки, чтобы код корректно обновил 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'])Построение вложенной структуры по шагам
Расположите строки кода в правильном порядке, чтобы создать словарь с вложенной структурой, добавить в неё данные и вывести результат. Код должен вывести число 25.
data['users'] = {}print(data['users']['admin']['age'])data['users']['admin'] = {}data = {}data['users']['admin']['age'] = 25Изменение вложенного словаря через переменную
Интересный момент: при присваивании вложенного словаря переменной, изменения через эту переменную затронут исходный словарь. Что выведет этот код?
original = {
'settings': {
'volume': 50
}
}
ref = original['settings']
ref['volume'] = 100
print(original['settings']['volume'])