Словарные включения (dictionary comprehension) — это элегантный способ создавать словари в одну строку. Вместо того чтобы писать цикл и постепенно добавлять пары ключ-значение, ты описываешь всю логику компактно. Синтаксис похож на генераторы списков, но результатом будет словарь. В этом тренажере ты научишься создавать словари из списков, фильтровать данные по условию, трансформировать ключи и значения, а также работать с вложенными структурами. Задания идут от простых примеров к более хитрым конструкциям. Не торопись — лучше разобраться в каждом шаге, чем потом путаться в скобках и двоеточиях.
- Модуль 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: Продвинутые возможности
Базовый синтаксис dictionary comprehension
Создайте словарь, где ключами будут числа от 1 до 3, а значениями — их квадраты. Используйте dictionary comprehension с функцией range().
# Создаём словарь {1: 1, 2: 4, 3: 9}
squares = input1Sn: n input2S 2 for n in input3Sinput4SЧто создаст этот comprehension?
Проанализируйте dictionary comprehension, который создаёт словарь из списка слов. Что будет выведено на экран?
words = ['cat', 'dog', 'bird']
lengths = {word: len(word) for word in words}
print(lengths)Собери comprehension из токенов
Используя элементы из банка, соберите dictionary comprehension, который создаёт словарь из списка чисел. Ключом будет число, значением — число, умноженное на 10.
numbers = [1, 2, 3]
result = {input1S: input2S input3S input4S in numbers}
# Ожидаемый результат: {1: 10, 2: 20, 3: 30}Вычисли результат comprehension
Этот код создаёт словарь из списка чисел. Определите, сколько элементов будет в итоговом словаре, и введите это число.
nums = [5, 10, 15, 20, 25]
doubled = {n: n * 2 for n in nums}
print(len(doubled))Comprehension с условием if
Создайте словарь только из чётных чисел списка. Ключ — само число, значение — его квадрат. Используйте условие фильтрации в конце comprehension.
numbers = [1, 2, 3, 4, 5, 6]
# Результат: {2: 4, 4: 16, 6: 36}
even_squares = {n: n ** 2 for n in numbers input1S n input2S 2 input3S 0}Исправьте синтаксическую ошибку
В этом коде есть ошибка в синтаксисе dictionary comprehension. Найдите строку с ошибкой и исправьте её.
names = ['Alice', 'Bob', 'Charlie']name_lengths = {name, len(name) for name in names}print(name_lengths)Comprehension с условием if
Этот comprehension фильтрует словарь, оставляя только определённые элементы. Что будет выведено?
prices = {'apple': 30, 'banana': 25, 'mango': 80, 'kiwi': 60}
expensive = {k: v for k, v in prices.items() if v > 50}
print(expensive)Сопоставьте comprehension с результатом
Сопоставьте каждый dictionary comprehension с результатом его выполнения. Список nums = [1, 2, 3] для всех примеров.
{str(n): n for n in nums}{n: n * 2 for n in nums}{n: n for n in nums}Соберите код с enumerate
Соберите код, который создаёт словарь, где ключом будет индекс элемента, а значением — сам элемент списка. Используется функция enumerate(). Одна строка лишняя.
indexed = {i: fruit for i, fruit in enumerate(fruits)}print(indexed)fruits = ['apple', 'banana', 'cherry']indexed = {fruit: i for i, fruit in enumerate(fruits)}Трансформация значений словаря
Создайте новый словарь на основе существующего, преобразовав все значения (цены) — увеличьте их на 10%. Ключи остаются без изменений.
prices = {'bread': 50, 'milk': 80, 'eggs': 120}
# Увеличиваем все цены на 10%
new_prices = {k: input1S for input2S in prices.input3S()}
# Результат: {'bread': 55.0, 'milk': 88.0, 'eggs': 132.0}Классификация: comprehension или set?
Фигурные скобки в Python могут означать и словарь, и множество. Распределите выражения по категориям: что создаёт словарь (dict), а что — множество (set).
{x: x**2 for x in range(3)}{x for x in range(3)}{k: v for k, v in pairs}{len(s) for s in words}{i: names[i] for i in range(len(names))}{word.upper() for word in words}Comprehension с zip
Функция zip() объединяет два списка попарно. Определите, какое значение будет у ключа 'b' в итоговом словаре.
keys = ['a', 'b', 'c']
values = [10, 20, 30]
data = {k: v for k, v in zip(keys, values)}
print(data['b'])Ошибка в условии comprehension
Код должен создать словарь только из положительных чисел, но содержит ошибку. Найдите и исправьте проблемную строку.
numbers = [-2, 5, -1, 8, 3, -4]positive = {n: n * 10 if n > 0 for n in numbers}print(positive)Инверсия словаря
Этот comprehension меняет местами ключи и значения исходного словаря. Что будет выведено?
original = {'x': 1, 'y': 2, 'z': 3}
inverted = {v: k for k, v in original.items()}
print(inverted)Comprehension с тернарным оператором
Создайте словарь, где для каждого числа из списка значением будет 'even' (чётное) или 'odd' (нечётное). Используйте тернарный оператор.
nums = [1, 2, 3, 4]
parity = {n: input1S if input2S else input3S for n in nums}
# Результат: {1: 'odd', 2: 'even', 3: 'odd', 4: 'even'}