繁体   English   中英

如何将列表转换为以索引为值的字典?

[英]How to convert a list to a dictionary with indexes as values?

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

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

像这样的字典:

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

我尝试过其他帖子的答案,但没有一个对我有用。 我现在有以下代码:

d = {l[i]: i for i in range(len(l))}

这给了我这个错误:

unhashable type: 'list'

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

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

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

使用内置函数 dict 和 zip :

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

Python dict构造函数能够将tuple列表转换为dict ,键作为元组的第一个元素,值作为元组的第二个元素。 为此,您可以使用生成(index, value) tuple的内置函数enumerate

然而问题的要求恰恰相反,即tuple应该是(value, index) 因此,在传递给 dict 构造函数之前,这需要额外的步骤来反转元组元素。 对于这一步,我们可以使用 builtinreversed并使用map将其应用于列表的每个元素

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

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

your_list = ['A', 'B', 'C']
your_dict = {key: i for i, key in enumerate(your_list)}
  1. 如果目标列表中的元素是唯一的,那么字典理解应该足够优雅,就像接受的答案一样。

     >>> lst = ['A', 'B', 'C'] >>> pos_map = {ele: pos for pos, ele in enumerate(lst)}
  2. 但是如果target list 中有重复的元素,那么我们可以使用collections模块中方便的defaultdict

     >>> lst = ['A', 'B', 'C', 'A', 'A', 'B'] >>> from collections import defaultdict >>> pos_map = defaultdict(list) >>> for pos, ele in enumerate(lst): >>> pos_map[ele].append(pos) >>> >>> pos_map >>> defaultdict(list, {'A': [0, 3, 4], 'B': [1, 5], 'C': [2]})

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

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

我使用的最简单的解决方案是:

lst = list('ABC')
dict(enumerate(lst))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM