Python Glossary English

все Python 3Словари (dict)функция

Словарные выражения (dict comprehension)

comprehension

Dict comprehension создаёт словарь из итерируемого объекта. Поддерживает фильтрацию.

Синтаксис

{k: v for ... in ...}  |  {k: v for ... in ... if cond}

Если выражение для ключа даёт повторы, исключения не будет — победит последнее вычисленное значение, и часть элементов молча исчезнет, поэтому длина результата может оказаться меньше длины исходной последовательности. Двоеточие — единственное, что отличает dict comprehension от set comprehension: {f(x) for x in xs} собирает множество, а не словарь. Переменная цикла живёт только внутри выражения и наружу не утекает.

Примеры

squares = {x: x**2 for x in range(5)}
print(squares)
# → {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
even_vals = {k: v for k, v in d.items() if v % 2 == 0}
print(even_vals)
# → {'b': 2, 'd': 4}
inverted = {v: k for k, v in d.items()}
print(inverted)
# → {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
words = ['hello', 'world', 'python']
lengths = {w: len(w) for w in words}
print(lengths)
# → {'hello': 5, 'world': 5, 'python': 6}
keys = ['a', 'b', 'c']
vals = [1, 2, 3]
combined = {k: v for k, v in zip(keys, vals)}
print(combined)
# → {'a': 1, 'b': 2, 'c': 3}
upper_d = {k.upper(): v*2 for k, v in d.items()}
print(upper_d)
# → {'A': 2, 'B': 4, 'C': 6, 'D': 8}
matrix = {(i, j): i*j for i in range(3) for j in range(3)}
print(matrix[(2, 2)])
# → 4
data = [('a', 1), ('b', 2), ('a', 3)]
last = {k: v for k, v in data}
print(last)
# → {'a': 3, 'b': 2} (последнее значение для дублей)

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности