Сожмите запись в словаре при создании последнего с помощью функции перечисления
Есть ли способ написать следующее в одной строке?
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, ' '))}