我正在尝试转换列表:
[A, B, A, A, B, C]
到每个项目的字典和找到它的索引:
{ A : [0,2,3], B : [1,4], C : [5] }
有没有想过有效的方法呢?
答案 0 :(得分:2)
使用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]})
或者,这可以使用普通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]}