Он использует generator expression для создания итератора кортежей, который затем переходит к конструктору dict
для создания нового словаря. Это помогает, если вы посмотрите на то, что генератор делает путем преобразования его в список:
>>> list((chr(i), range(i, i+5)) for i in range(65,70))
[('A', [65, 66, 67, 68, 69]), ('B', [66, 67, 68, 69, 70]), ('C', [67, 68, 69, 70, 71]), ('D', [68, 69, 70, 71, 72]), ('E', [69, 70, 71, 72, 73])]
Помните, что если вы передаете dict
список кортежей, первый элемент каждого кортежа будет использоваться в качестве ключа и второй в качестве значения:
>>> dict([('key1', 'val1'), ('key2', 'val2')])
{'key2': 'val2', 'key1': 'val1'}
кроме этого, единственное, что вам нужно знать, чтобы понять, что выражение это то, что chr
и range
делать.
Он должен быть лучше, чем 'ds = {chr (i): range (i, i + 5) для i в диапазоне (65,70)}'. Зачем создавать генератор, а затем dict, когда вы можете напрямую создать dict? – Billiska
@Billiska: Потому что неполадки dict не были введены до Python 2.7. – Blender
'pprint' здесь не имеет отношения. – Elazar