Python-基于键属性获取最大字典键
我有一个Python-基于键属性获取最大字典键,python,dictionary,attributes,key,max,Python,Dictionary,Attributes,Key,Max,我有一个节点类,定义如下(为了简化,我只复制了相关代码): 我还有一个字典,它将节点对象作为键,并将键节点的邻居列表作为每个键的值 successorTable = { Node(0, 1): [Node(1, 0)], Node(1, 0): [Node(0, 1)], # and so on ... } 现在我想做的是获取字典的键(节点对象),最大值为x,最大值为y 所以我基本上是想得到以下结果: # maxXNode -> Node(1, 0) # maxY
节点
类,定义如下(为了简化,我只复制了相关代码):
我还有一个字典,它将节点
对象作为键,并将键节点的邻居列表作为每个键的值
successorTable = {
Node(0, 1): [Node(1, 0)],
Node(1, 0): [Node(0, 1)],
# and so on ...
}
现在我想做的是获取字典的键(节点对象),最大值为x
,最大值为y
所以我基本上是想得到以下结果:
# maxXNode -> Node(1, 0)
# maxYNode -> Node(0, 1)
你的问题
首先,对于你的问题,你可以这样做
max_x = max(successorTable.keys(), key=lambda n: n.x)
max_y = max(successorTable.keys(), key=lambda n: n.y)
其他问题
然后在你的代码上写一个字
我建议您小心使用节点
作为字典键,因为您没有定义\uuuuuuu散列
和\uuuuuuuu eq
方法
d = {}
d[Node(0, 0)] = 0
d[Node(0, 0)] # raises a KeyError
默认情况下,对象通过其id进行散列和比较,因此具有相同坐标的两个节点不会散列为相同的值。你可能想这样解决这个问题
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)
我们使用
\ux
、\uy
和属性
来强调这样一个事实,即这些属性在用于哈希时不应更新。您的节点对象是否有\uuhash\ucode>特殊方法?否则,这将无法按您的意愿工作。为什么您需要可成功的
?这不是Node.neights的作用吗?也就是说,任何时候使用successorTable[x]
,您都可以改为说x.neights
。后续节点是节点在一个特定方向上的邻居。这就是为什么我需要successorTable
,它是图形的属性,而不是节点的属性。然而,我会在一个非定向图中使用Node.neights
。@jdehesa,你的回答给了我一个线索,尽管我不得不修改它。谢谢这是修改后的版本:max\u key\u x=max(successorTable.keys(),key=lambda n:n.y).y
max\u key\u y=max(successorTable.keys(),key=lambda n:n.x).x
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)