aha*_*jib 47 python dictionary
我想转换以下列表:
list = ['A','B','C']
Run Code Online (Sandbox Code Playgroud)
对于像这样的字典:
dict = {'A':0, 'B':1, 'C':2}
Run Code Online (Sandbox Code Playgroud)
我试过其他帖子的答案,没有一个对我有用.我现在有以下代码:
{list[i]: i for i in range(len(list))}
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.谢谢.
Abh*_*jit 75
您可以从内置枚举中获取列表的索引.您只需要反转索引值映射并使用字典理解来创建字典
>>> lst = ['A','B','C']
>>> {k: v for v, k in enumerate(lst)}
{'A': 0, 'C': 2, 'B': 1}
Run Code Online (Sandbox Code Playgroud)
哦,永远不要将变量命名为内置或类型.
gr1*_*e4r 12
您还可以利用enumerate:
your_list = ['A', 'B', 'C']
your_dict = {key: i for i, key in enumerate(your_list)}
Run Code Online (Sandbox Code Playgroud)
Soh*_*oqi 10
Pythondict构造函数能够将列表转换tuple为dict,键作为元组的第一个元素,值作为元组的第二个元素。要做到这一点,你可以使用内置函数 enumerate,其产生tuple的(index, value)。
然而问题的要求恰恰相反,即tuple应该是(value, index)。因此,在传递给 dict 构造函数之前,这需要额外的步骤来反转元组元素。对于这一步,我们可以使用 builtinreversed并将其应用于列表的每个元素map
>>> lst = ['A', 'B', 'C']
>>> dict(map(reversed, enumerate(lst)))
>>> {'A': 0, 'C': 2, 'B': 1}
Run Code Online (Sandbox Code Playgroud)
使用内置函数dict和zip:
>>> lst = ['A','B','C']
>>> dict(zip(lst,range(len(lst))))
Run Code Online (Sandbox Code Playgroud)
如果目标列表中的元素是唯一的,那么字典理解应该足够且优雅,就像接受的答案一样。
>>> lst = ['A', 'B', 'C']
>>> pos_map = {ele: pos for pos, ele in enumerate(lst)}
Run Code Online (Sandbox Code Playgroud)
但是如果目标列表中有重复的元素,那么我们可以使用方便的defaultdict模块collections:
>>> 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]})
Run Code Online (Sandbox Code Playgroud)