我有一个(大)整数数组
materials = [0, 0, 47, 0, 2, 2, 47] # ...
只有很少的唯一条目,我想将其转换为索引字典,即
d = {
0: [0, 1, 3],
2: [4, 5],
47: [2, 6],
}
这样做最有效的方法是什么? (欢迎大家加入。)
最佳答案
无需numpy
,它们是标准的python结构,dict comprehension可以很好地解决您的问题:
materials = [0, 0, 47, 0, 2, 2, 47]
d = {v : [i for i,x in enumerate(materials) if x==v] for v in set(materials)}
print(d)
结果:
{0: [0, 1, 3], 2: [4, 5], 47: [2, 6]}
[i for i,x in enumerate(materials) if x==v]
查找列表中元素的所有索引(index
仅查找第一个)在我的答案的第一个版本中,我在列表本身上进行了迭代,但这有点浪费,因为当出现很多情况时它将多次覆盖键,并且内部列表理解具有
n
复杂度,因此总体复杂度不会这么好。在我写最后一条评论时,有人建议对唯一元素进行迭代,这很好,因此请将输入列表转换为
set
!关于python - 将整数数组转换为索引字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42740483/