Сожмите запись в словаре при создании последнего с помощью функции перечисления

Есть ли способ написать следующее в одной строке?

x = {item: i for i, item in enumerate([letters for letters in ascii_lowercase])}
x[' '] = 27

Я пробовал что-то вроде

x = {item: i for i, item in enumerate([letters for letters in ascii_lowercase]), ' ': 27}

но без удачи.

2 ответа

Решение

Python >=3.5 решение с использованием dict-расширения

x = {**{item: i for i, item in enumerate(ascii_lowercase)}, **{' ' : 27}}

С учетом сказанного, ваше решение очень читабельно, и я бы предпочел его этому. Но это самое близкое, что вы можете получить к тому, что вы пытались.

Если предположить, ascii_lowercase исходит из встроенного строкового модуля, вы бы сделали это:

{item: i for i, item in enumerate(ascii_lowercase + ' ')}

Но должна ли последовательность индекса начинаться с 0 или 1? Вы можете контролировать это через start аргумент enumerate (значение по умолчанию 0).

Если последовательность должна быть основана на 0, и вам нужно пропустить индекс 26, вам нужно сделать что-то вроде

{item: i for i, item in (*enumerate(ascii_lowercase), (27, ' '))}
Другие вопросы по тегам