Python - 根据键属性获取最大字典键

时间:2018-03-21 13:53:59

标签: python dictionary attributes key max

我有一个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)

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来强调这些属性不应更新,因为它们用于散列。