Коллекции

Перебор словаря и вложенные структуры

Содержание курса

Словарь со списком в качестве значения и вложенный цикл

До сих пор значениями словаря были простые объекты — строки, числа. Но значением может быть и список. Это позволяет группировать несколько связанных элементов под одним ключом.

Пример: словарь учебных предметов, где к каждому предмету привязан список тем:

courses = {
    'математика': ['алгебра', 'геометрия'],
    'физика': ['механика', 'оптика']
}

Чтобы обратиться к конкретной теме, используется двойная индексация — сначала ключ словаря, затем индекс внутри списка:

print(courses['физика'][0])  # механика

Первая пара скобок достаёт список по ключу 'физика', вторая — берёт нулевой элемент из этого списка.

Когда нужно пройтись по всем предметам и их темам сразу, одного цикла не хватит. Внешний цикл перебирает пары предмет → список тем, внутренний — темы внутри каждого списка:

for subject, topics in courses.items():
    for topic in topics:
        print(f'{subject} — {topic}')

Вывод:

математика — алгебра
математика — геометрия
физика — механика
физика — оптика

Здесь subject — это ключ (название предмета), topics — список тем, который был значением в словаре. На каждой итерации внешнего цикла переменная topics содержит очередной список, и внутренний for topic in topics проходит по его элементам.

Это двухуровневая итерация: количество шагов внутреннего цикла зависит от длины каждого конкретного списка-значения, а не фиксировано заранее. Если у одного предмета три темы, а у другого — пять, внутренний цикл выполнится соответствующее количество раз.

Такую структуру — словарь, где ключи это категории, а значения это списки элементов — используют часто: список покупок по категориям, сотрудники по отделам, тэги по статьям. Паттерн один и тот же: внешний for k, v in d.items(), внутренний for item in v.

Начать заново?

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

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

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

Проверка решения остаётся отдельным действием.