我正在尝试用Python编写一个自定义比较器,该比较器根据以下规则比较两个节点对象 1.最低频率 2.最短的长度 3.词典顺序。
这是我的节点对象
class Node:
def __init__(self, key: str, value: int):
self.key = key
self.value = value
这是我的比较器
class Comparator:
def __init__(self, node):
self.node = node
def __lt__(self, other):
if self.node.value > other.value:
return True
elif len(self.node.key) > len(other.key):
return True
elif self.node.key > other.key:
return True
我正在尝试使用此比较器将节点项推送到堆,这是我的代码,
frequency_map = Counter(string)
for k, v in frequency_map.items():
p = Node(k, v)
heapq.heappush(self.heap, Comparator(p))
这会引发以下错误,
AttributeError: 'Comparator' object has no attribute 'value'
我在这里做什么错了?
答案 0 :(得分:1)
在您的Comparator
类中:
def __lt__(self, other):
if self.node.value > other.value:
return True
self
和other
都是Comparator
的实例(Python无法知道这仅仅是一个对象包装器),您需要检查other.node.value
。