我有一个Node
类定义如下(我只复制相关代码以简化):
class Node(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.neighbours = []
我还有一个字典,其中Node
个对象作为键,而键节点的邻居列表作为每个键的值。
successorTable = {
Node(0, 1): [Node(1, 0)],
Node(1, 0): [Node(0, 1)],
# and so on ...
}
现在我想做的是获取字典的键(Node对象),其最大值为x
,密钥的最大值为y
所以我基本上想要得到以下结果:
# maxXNode -> Node(1, 0)
# maxYNode -> Node(0, 1)
答案 0 :(得分:2)
首先,对于你的问题,你可以这样做。
"GET"
然后在你的代码上说一句话。
我建议您使用max_x = max(successorTable.keys(), key=lambda n: n.x)
max_y = max(successorTable.keys(), key=lambda n: n.y)
作为字典键时要小心,因为您没有定义Node
和__hash__
方法。
__eq__
默认情况下,对象经过哈希处理并通过其id进行比较,因此具有相同坐标的两个节点将不会哈希到相同的值。你可能想要解决这个问题。
d = {}
d[Node(0, 0)] = 0
d[Node(0, 0)] # raises a KeyError
我们使用class Node(object):
def __init__(self, x, y):
self._x = x
self._y = y
self.neighbours = []
@property
def x(self):
return self._x
@property
def y(self):
return self._y
def __hash__(self):
return hash((self.x, self.y))
def __eq__(self, other):
return (self.x, self.y) == (other.x, other.y)
,_x
和_y
来强调这些属性不应更新,因为它们用于散列。