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)}