带索引的Python词汇表列表

带索引的Python词汇表列表,python,list,dictionary,Python,List,Dictionary,我正在尝试转换列表: [A, B, A, A, B, C] 到包含每个项目及其所在索引的词汇表: { A : [0,2,3], B : [1,4], C : [5] } 有什么有效的方法吗?使用defaultdict和enumerate: >>> lst = ['a','b','a','a','b','c'] >>> from collections import defaultdict >>> d = defaultdict(list)

我正在尝试转换列表:

[A, B, A, A, B, C]
到包含每个项目及其所在索引的词汇表:

{ A : [0,2,3], B : [1,4], C : [5] }

有什么有效的方法吗?

使用
defaultdict
enumerate

>>> lst = ['a','b','a','a','b','c']
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i, value in enumerate(lst):
...     d[value].append(i)
...
>>> d
defaultdict(<class 'list'>, {'a': [0, 2, 3], 'c': [5], 'b': [1, 4]})
当然,您可以将
defaultdict
转换为
dict

>>> d
defaultdict(<class 'list'>, {'a': [0, 2, 3], 'c': [5], 'b': [1, 4]})
>>> dict(d)
{'a': [0, 2, 3], 'c': [5], 'b': [1, 4]}
>>> help(dict)
>>d
defaultdict(,{'a':[0,2,3],'c':[5],'b':[1,4]})
>>>迪克特(d)
{'a':[0,2,3],'c':[5],'b':[1,4]}
>>>帮助(dict)

使用
defaultdict
枚举

>>> lst = ['a','b','a','a','b','c']
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i, value in enumerate(lst):
...     d[value].append(i)
...
>>> d
defaultdict(<class 'list'>, {'a': [0, 2, 3], 'c': [5], 'b': [1, 4]})
当然,您可以将
defaultdict
转换为
dict

>>> d
defaultdict(<class 'list'>, {'a': [0, 2, 3], 'c': [5], 'b': [1, 4]})
>>> dict(d)
{'a': [0, 2, 3], 'c': [5], 'b': [1, 4]}
>>> help(dict)
>>d
defaultdict(,{'a':[0,2,3],'c':[5],'b':[1,4]})
>>>迪克特(d)
{'a':[0,2,3],'c':[5],'b':[1,4]}
>>>帮助(dict)

使用列表理解和听写理解。首先从列表中创建一个集合。然后您可以很容易地使用enumerate并执行此操作

>>> l = ["A", "B", "A", "A", "B", "C"]
>>> {i:[j for j,k in enumerate(l) if k==i] for i in set(l)}
{'C': [5], 'B': [1, 4], 'A': [0, 2, 3]}

使用列表理解和听写理解。首先从列表中创建一个集合。然后您可以很容易地使用enumerate并执行此操作

>>> l = ["A", "B", "A", "A", "B", "C"]
>>> {i:[j for j,k in enumerate(l) if k==i] for i in set(l)}
{'C': [5], 'B': [1, 4], 'A': [0, 2, 3]}
试试这个

lst = ['A', 'B', 'A', 'A', 'B', 'C']
print {i:[j[0] for j in enumerate(lst) if j[1] == i] for i in set(lst)}
结果

{'A': [0, 2, 3], 'B': [1, 4], 'C': [5]}
试试这个

lst = ['A', 'B', 'A', 'A', 'B', 'C']
print {i:[j[0] for j in enumerate(lst) if j[1] == i] for i in set(lst)}
结果

{'A': [0, 2, 3], 'B': [1, 4], 'C': [5]}

@当然可以。
dict
是否可以进行映射可能并不明显。@MYGz当然可以。
dict
可以进行映射可能并不明显。您不需要通过索引访问元组,直接使用元组解包。您不需要通过索引访问元组,直接使用元组解包。这是效率低下的。当你设置(l)时,你在
l
上传递一次,然后你在
k
上进行更多的传递,其中
k
l
中唯一元素的数量。这是低效的。当您设置(l)时,您将传递
l
,然后进行
k
更多传递,其中
k
l
中唯一元素的数量。