Python列表到带有索引的字典

时间:2017-02-09 10:17:13

标签: python list dictionary

我正在尝试转换列表:

[A, B, A, A, B, C]

到每个项目的字典和找到它的索引:

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

有没有想过有效的方法呢?

3 个答案:

答案 0 :(得分:2)

使用defaultdictenumerate

>>> 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]})

或者,这可以使用普通dict来完成,但通常较慢:

>>> lst = ['a','b','a','a','b','c']
>>> d = {}
>>> for i, value in enumerate(lst):
...     d.setdefault(value, []).append(i)
...
>>> d
{'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)

答案 1 :(得分:2)

试试这个,

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]}

答案 2 :(得分:1)

使用列表理解和词典理解。首先从列表中创建一个集合。然后你可以轻松使用枚举并执行此操作。

>>> 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]}