x: y for x in range(4) for y in range(4)}
Возвращает:
{0: 3, 1: 3, 2: 3, 3: 3}
Нужно получить:
{0: 0, 1: 1, 2: 2, 3: 3}
Знаю, что можно было просто сделать так:
{x: x for x in range(4)}
Но вот, если я хочу сделать вывод
{0: 15, 1: 16, 2: 17, 3: 18}
то так не получится:
{x: y for x in range(4) for y in range(15, 19) }
Подобно генераторам списков, генераторы множеств и словарей способны выполнять итерации по итераторам любых типов – спискам, строкам, файлам,диапазонам целых чисел и любым другим объектам, поддерживающим протокол итераций: >>> {x + y for x in ‘ab’ for y in ‘cd’} {‘bd’, ‘ac’, ‘ad’, ‘bc’} >>> {x + y: (ord(x), ord(y)) for x in ‘ab’ for y in ‘cd’} {‘bd’: (98, 100), ‘ac’: (97, 99), ‘ad’: (97, 100), ‘bc’: (98, 99)}
>>> {k * 2 for k in [‘spam’, ‘ham’, ‘sausage’] if k[0] == ‘s’}
{‘sausagesausage’, ‘spamspam’}
>>> {k.upper(): k * 2 for k in [‘spam’, ‘ham’, ‘sausage’] if k[0] == ‘s’}
{‘SAUSAGE’: ‘sausagesausage’, ‘SPAM’: ‘spamspam’}