Python: конвертировать список в словарь с индексами

Я пытаюсь преобразовать следующий список:

list = ['A','B','C']

В словарь, например:

dict = {'A':0, 'B':1, 'C':2}

Я пробовал ответы от других сообщений, которые не работают для меня. У меня есть следующий код:

{list[i]: i for i in range(len(list))}

Который дает мне эту ошибку:

unhashable type: 'list'

Буду признателен за любую оказанную помощь. Благодарю.

Ответ 1

Вы можете получить индексы списка из встроенного перечисления. Вам просто нужно отменить карту значений индекса и использовать понимание словаря для создания словаря

>>> lst = ['A','B','C']
>>> {k: v for v, k in enumerate(lst)}
{'A': 0, 'C': 2, 'B': 1}

Ох, и никогда не называйте переменную встроенным или типом.

Ответ 2

Используйте встроенные функции dict и zip:

>>> lst = ['A','B','C']
>>> dict(zip(lst,range(len(lst))))

Ответ 3

Конструктор dict имеет возможность конвертировать список tuple в dict, причем ключ как первый элемент кортежа и значение как второй элемент кортежа. Для этого вы можете использовать встроенную функцию enumerate которая дает tuple (index, value).

Однако требование вопроса является абсолютно противоположным, т. tuple должен быть (value, index). Таким образом, для этого требуется и дополнительный шаг, чтобы отменить элементы кортежа, прежде чем перейти к конструктору dict. Для этого шага мы можем использовать встроенный reversed и применить его к каждому элементу списка, используя map

>>> lst = ['A', 'B', 'C']
>>> dict((map(reversed, enumerate(lst))))
>>> {'A': 0, 'C': 2, 'B': 1}

Ответ 4

Не используйте list качестве имени переменной, поскольку он зарезервирован Python. Вы также можете воспользоваться enumerate.

your_list = ['A', 'B', 'C']
dict = {key: i for i, key in enumerate(your_list)}

Ответ 5

Вы должны преобразовать список расщепления в кортеж:

dct = {tuple(key): idx for idx, key in enumerate(lst)}