← Назад к вопросам

Что такое Dict Comprehension в Python?

1.0 Junior🔥 191 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Dict Comprehension в Python

Определение

Dict Comprehension (словарное выражение) — это компактный и элегантный способ создания словарей в Python. Это синтаксический сахар, который позволяет создавать словари одной строкой вместо использования циклов.

Базовый синтаксис

# Общая форма:
{key: value for item in iterable}

# С условием:
{key: value for item in iterable if condition}

Простые примеры

Создание словаря из чисел

# Без comprehension
squares = {}
for i in range(5):
    squares[i] = i ** 2

# С comprehension
squares = {i: i ** 2 for i in range(5)}
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Обращение ключ-значение

original = {"a": 1, "b": 2, "c": 3}
swapped = {value: key for key, value in original.items()}
print(swapped)  # {1: "a", 2: "b", 3: "c"}

Dict Comprehension с условиями

Фильтрация элементов

# Только чётные числа
even_squares = {i: i ** 2 for i in range(10) if i % 2 == 0}
print(even_squares)  # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

Фильтрация слов

words = ["cat", "elephant", "dog", "butterfly"]
word_lengths = {word: len(word) for word in words if len(word) > 3}
print(word_lengths)  # {"elephant": 8, "butterfly": 9}

Практические примеры

Подсчёт частоты символов

text = "hello world"
char_count = {char: text.count(char) for char in set(text) if char != " "}
print(char_count)  # {"h": 1, "e": 1, "l": 3, "o": 2, "w": 1, "r": 1, "d": 1}

Преобразование JSON данных

users = [
    {"id": 1, "name": "Alice", "age": 30},
    {"id": 2, "name": "Bob", "age": 25},
    {"id": 3, "name": "Charlie", "age": 35},
]

user_names = {user["id"]: user["name"] for user in users}
print(user_names)  # {1: "Alice", 2: "Bob", 3: "Charlie"}

Фильтрация и преобразование

numbers = [-3, -1, 0, 2, 4, -5, 7]
positive_squares = {n: n**2 for n in numbers if n > 0}
print(positive_squares)  # {2: 4, 4: 16, 7: 49}

Преобразование двух списков в словарь

keys = ["a", "b", "c", "d"]
values = [1, 2, 3, 4]

result = {k: v for k, v in zip(keys, values)}
print(result)  # {"a": 1, "b": 2, "c": 3, "d": 4}

Вложенные Dict Comprehensions

Таблица умножения

times_table = {f"{i}x{j}": i * j for i in range(1, 4) for j in range(1, 4)}
print(times_table)  # {"1x1": 1, "1x2": 2, "1x3": 3, ..., "3x3": 9}

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

matrix = {i: {j: i + j for j in range(3)} for i in range(3)}
print(matrix)  # {0: {0: 0, 1: 1, 2: 2}, 1: {0: 1, 1: 2, 2: 3}, ...}

Сравнение производительности

Dict comprehension обычно быстрее циклов на 30-40% благодаря оптимизации интерпретатора Python:

import timeit

# Comprehension
time1 = timeit.timeit(
    lambda: {i: i**2 for i in range(1000)},
    number=10000
)

# Цикл
def loop_dict():
    d = {}
    for i in range(1000):
        d[i] = i**2
    return d

time2 = timeit.timeit(loop_dict, number=10000)

print(f"Comprehension: {time1:.4f}s")
print(f"Loop: {time2:.4f}s")

Особенности область видимости

# Переменные из comprehension не видны снаружи
result = {x: x**2 for x in range(5)}
print(x)  # NameError

# В обычном цикле переменная существует
for x in range(5):
    pass
print(x)  # 4

Dict comprehension vs другие методы

data = [("a", 1), ("b", 2), ("c", 3)]

# Comprehension
result1 = {k: v for k, v in data}

# dict() с zip
result2 = dict(data)

# Все дают одинаковый результат, но comprehension более явный
print(result1 == result2)  # True

Лучшие практики

Используй для простых трансформаций:

result = {k: v.upper() for k, v in data.items()}

Чередуй условия правильно:

result = {k: v for k, v in data.items() if v > 10}

Используй вложенные comprehensions для структурированных данных:

result = {i: {j: i*j for j in range(3)} for i in range(3)}

Избегай слишком сложной логики в comprehension: Если нужна сложная условная логика — используй обычный цикл для чтения кода.

Выводы

  • Dict Comprehension — мощный инструмент для создания словарей в одну строку
  • Более читаемо, чем циклы для простых случаев
  • Более эффективно по производительности (30-40% быстрее)
  • Соответствует философии Python (Pythonic)
  • Идеально для фильтрации, трансформации и объединения данных
  • Для сложной логики лучше использовать обычные циклы
Что такое Dict Comprehension в Python? | PrepBro