字典上的智能循环

问题描述 投票:2回答:2

我有字典,看起来像

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)]

但是当字典变大时,它变得太长,所以我在问是否有一种方法可以直接遍历字典的正确索引,或者我认为没有其他方法可以使它运行得更快。 (如果该解决方案不是很好的实践证明,但速度更快,则可以)

python dictionary optimization
2个回答
1
投票

首先,不要掩盖内置关键字range


0
投票

您可以在亚线性时间内通过对x和y坐标进行双重排序来实现。当然,这是假定点的字典是相当静态的,因为添加或移动事物的成本显然是很小的。


推荐问答