Генераторы словарей: создание словарей в одну строку
Что такое генераторы словарей и зачем они нужны? 🎩
Генераторы словарей (dictionary comprehensions) — это элегантный способ создания словарей в одну строку. Они работают по принципу «примени операцию к каждому элементу последовательности», как и list comprehensions, но с синтаксисом словарей.
Преимущества:
- ✨ Лаконичность — меньше кода, больше выразительности
- ⚡ Производительность — часто работают быстрее цикла
for - 🧠 Читаемость — код становится более понятным
Базовый синтаксис: от простого к сложному 🔍
Стандартная форма:
{key: value for item in iterable}
Пример с числами:
numbers = [1, 2, 3, 4]
squared_dict = {num: num**2 for num in numbers}
# Результат: {1: 1, 2: 4, 3: 9, 4: 16}
Фильтрация элементов 🚦
Можно добавлять условия с if:
even_squares = {n: n**2 for n in range(10) if n % 2 == 0}
# Результат: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
Практические примеры из реальной жизни 🌍
1. Обработка данных пользователей
users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
user_dict = {user['id']: user['name'] for user in users}
# Результат: {1: 'Alice', 2: 'Bob'}
2. Трансформация словаря
prices = {'apple': 0.5, 'banana': 0.25, 'orange': 0.75}
sale_prices = {fruit: price*0.9 for fruit, price in prices.items()}
# Скидка 10% на все фрукты
3. Создание словаря из двух списков
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = {k: v for k, v in zip(keys, values)}
# Альтернатива dict(zip(keys, values))
Продвинутые техники 🚀
Вложенные генераторы
matrix = [[1, 2], [3, 4], [5, 6]]
flat_dict = {(i, j): matrix[i][j]
for i in range(len(matrix))
for j in range(len(matrix[0]))}
# Результат: {(0, 0): 1, (0, 1): 2, (1, 0): 3, ...}
Условные выражения (ternary operator)
numbers = [1, 2, 3, 4, 5]
parity_dict = {n: 'even' if n % 2 == 0 else 'odd' for n in numbers}
Когда стоит избегать генераторов? ⚠️
- Слишком сложная логика — если выражение становится трудночитаемым, лучше использовать обычный цикл
- Побочные эффекты — генераторы предназначены для создания словарей, а не для выполнения операций с побочными эффектами
- Нужен break/continue — в генераторах нельзя использовать управляющие конструкции
Главное правило 🧠
Используй генераторы словарей, когда:
- Нужно создать новый словарь
- Логика преобразования простая и понятная
- Важна читаемость кода
Как говорит Данила Бежин: "Генераторы — это не просто синтаксический сахар, а мощный инструмент для написания чистого и эффективного кода."
Попробуй преобразовать свои следующие циклы создания словарей в генераторы — и ты почувствуешь разницу! 🐍💥