簡體   English   中英

如何在Python中構建列表中元素出現的索引的dict?

[英]How to build a dict of indices of occurences of elements in a list in Python?

將列表中所有元素的出現次數轉換為dict的最快方法是什么?

例如:

A = [ 1, 2, 3, 4 , 2, 1 ]

我想建立:

B['1'] = [0, 5]
B['2'] = [1, 4]
B['3'] = [2]
B['4'] = [3]

這是為了避免在循環中多次調用np.where ,這對於大A來說太慢了。理想情況下,只想遍歷數組A一次。 例如,要避免:

uniqA = np.unique(A)
for i in uniqA:
    B[str(i)] = np.argwhere(i==A)

你可以只迭代一次:

>>> from collections import defaultdict
>>> A = [ 1, 2, 3, 4 , 2, 1 ]
>>> d = defaultdict(list)
>>> for i,x in enumerate(A):
...    d[x].append(i)
...
>>> d
defaultdict(<type 'list'>, {1: [0, 5], 2: [1, 4], 3: [2], 4: [3]})

這樣的事情應該有效。

from collections import defaultdict
d = defaultdict(list)
for i, val in enumerate(A):
    d[val].append(i)

我認為不需要defaultdict - 不確定這是否比這種方法更好?

B={}
for i,x in enumerate(A):
    B[x]=B.get(x,[]) + [i]

結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM