[英]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)}
如果目标列表中的元素是唯一的,那么字典理解应该足够优雅,就像接受的答案一样。
>>> lst = ['A', 'B', 'C'] >>> pos_map = {ele: pos for pos, ele in enumerate(lst)}
但是如果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.