【发布时间】:2020-01-22 11:01:40
【问题描述】:
我有一个看起来像的字典
position_dictionnary = {(0,0): <PositionObject1>, (0,1): <PositionObject2>, ... (x,y): <PositionObjectn>}
我有一个函数需要返回给定位置周围特定范围内的 PositionObject 列表。现在我有这段代码对我来说很好用:
def getSurrounding(center_position, range, position_dictionnary):
for x,y in position_dictionnary:
if abs(center_position.x - x) + abs(center_position.y - y) < range:
yield position_dictionnary[(x,y)]
但是当字典变大时,它变得太长了,所以我问是否有一种方法可以直接循环遍历字典的正确索引或另一种我看不到的让它运行得更快的方法。 (如果解决方案不是很好的实践证明,但速度更快,也可以)
【问题讨论】:
-
二维列表会更好吗?我想如果 x 和 y 总是整数会起作用
-
如果键非常稀疏,可能会占用太多内存。可能值得一看stackoverflow.com/questions/6179635/…
-
根据坐标创建有序字典。在键中进行二分搜索,并以此范围为条件向两个方向扩展。
-
@AlbinPaul 您会在这些键中搜索什么?我也在考虑对元素进行排序,但不清楚您要搜索什么。
-
@JeffH 搜索起来会有点棘手。我正在考虑测量
x - centerposition.x + y - centerposition.y作为条件来搜索该值是否小于该范围,我们可以取另一半。如果它满足我们停止和扩展双方的范围。
标签: python dictionary optimization