Python中的自定义比较器

时间:2018-07-13 15:35:24

标签: python heap comparator

我正在尝试用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'

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

在您的Comparator类中:

def __lt__(self, other):
    if self.node.value > other.value:
        return True

selfother都是Comparator的实例(Python无法知道这仅仅是一个对象包装器),您需要检查other.node.value