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


78

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

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

像这样的字典:

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

我尝试了其他职位的答案,但没有任何帮助。我现在有以下代码:

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

这给了我这个错误:

unhashable type: 'list'

任何帮助深表感谢。谢谢。


您的代码对我有用。
丹尼尔(Daniel)

3
1.不要list用作变量名2.enumerate如图所示使用{j:i for i,j in enumerate(l)}
Bhargav Rao

1
您有一个未向我们展示的代码错误。的元素list可能是列表,尽管您可能犯了其他错误,例如用list: i代替list[i]: i
user2357112支持Monica's

@ user2357112我编辑了帖子。您说得很对,这很重要。
ahajib 2016年

奇怪的是没有人注意到如果有重复的元素
怎么办

Answers:


118

您可以从内置的枚举中获取列表的索引。您只需要反转索引值映射并使用字典理解来创建字典

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

哦,永远不要将变量命名为内置变量或类型。


16

使用内置函数dict和zip:

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

9

Pythondict构造函数可以将list转换tupledict,其中key为tuple的第一个元素,value为tuple的第二个元素。要做到这一点,你可以使用内置函数 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}

该版本似乎比提供的其他解决方案花费的时间更长
Leland Hepworth

3

不要将其list用作变量名,因为它是Python保留的变量。您还可以利用enumerate

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

1
为什么不使用for循环的项目?
丹尼尔(Daniel)

因为您不必。我还是改变了。
gr1zzly be4r

0

您必须将不可散列列表转换为元组:

dct = {tuple(key): idx for idx, key in enumerate(lst)}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.