我有一个(大)整数数组

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/

10-11 14:20