Python:使用索引将列表转换为字典

时间:2016-04-06 18:55:09

标签: python dictionary

我正在尝试转换以下列表:

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

到以下字典:

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

我已经尝试过其他帖子的答案,这些答案对我有用。我现在有以下代码:

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

这给了我这个错误:

unhashable type: 'list'

非常感谢任何帮助。感谢。

6 个答案:

答案 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))

编辑:这与作者需要的和我需要的正好相反