我正在尝试转换以下列表:
list = ['A','B','C']
到以下字典:
dict = {'A':0, 'B':1, 'C':2}
我已经尝试过其他帖子的答案,这些答案对我有用。我现在有以下代码:
{list[i]: i for i in range(len(list))}
这给了我这个错误:
unhashable type: 'list'
非常感谢任何帮助。感谢。
答案 0 :(得分:61)
您可以从内置enumerate获取列表的索引。您只需要反转索引值映射并使用字典理解来创建字典
>>> lst = ['A','B','C']
>>> {k: v for v, k in enumerate(lst)}
{'A': 0, 'C': 2, 'B': 1}
哦,永远不要将变量命名为内置或类型。
答案 1 :(得分:7)
使用内置函数dict和zip:
>>> lst = ['A','B','C']
>>> dict(zip(lst,range(len(lst))))
答案 2 :(得分:3)
Python dict
构造函数能够将tuple
的列表转换为dict
,其中key作为元组的第一个元素,value作为元组的第二个元素。要实现此目的,您可以使用内置函数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}
答案 3 :(得分:1)
不要使用list
作为变量名,因为它是由Python保留的。您还可以利用enumerate
。
your_list = ['A', 'B', 'C']
dict = {key: i for i, key in enumerate(your_list)}
答案 4 :(得分:0)
您必须将不可用的列表转换为元组:
dct = {tuple(key): idx for idx, key in enumerate(lst)}
答案 5 :(得分:0)
我使用的最简单的解决方案是:
lst = list('ABC')
dict(enumerate(lst))
编辑:这与作者需要的和我需要的正好相反