有效地将索引/值对列表分组为列表或列表字典

问题描述 投票:0回答:1

我有一长串(i,j,值)对,每个位置有多个值,每个位置的值数量各不相同。

目前我正在初始化一个空的“3d”列表

sorted = numpy.empty((m, n, 0)).tolist()

然后我循环遍历数组中的每个条目并将值附加到列表中的 i, j 处。

for pixel in value_list:
    sorted[pixel[0]][pixel[1]].append(pixel[2])

这很慢并且很难并行化,因为我必须写入相同的列表并且不知道它们最后会持续多长时间。

我认为我的问题非常相似

defaultdict 示例,用于将一系列键值对分组到列表字典中,其中键为“i,j”。

是否有更有效的解决方案或者可以轻松并行化的解决方案?

python sorting grouping indices binning
1个回答
0
投票

我本来打算建议使用 defaultdict 方法,但在我发布之前你编辑了问题。 不确定它会更快,但似乎它可能使用更少的内存。

from collections import defaultdict
pixel_values = defaultdict(list)

pixel_list = [
  (1, 2, 42),
  (2, 1, 43),
  (1, 2, 44),
  (3, 4, 45)
]

for pixel in pixel_list:
  x, y, value = pixel
  pixel_values[(x, y)].append(value) 
print(pixel_values)
© www.soinside.com 2019 - 2024. All rights reserved.