具有两个优先级Python的优先级队列

Sve*_*ger 3 python priority-queue

我正在寻找一种优先级队列,它允许我给出两个优先级.我希望它只检查第一个值,然后检查第二个值这是一些代码

import Queue

class Job(object):
    def __init__(self, fpriority, spriority, description, iata , hops, cost):
        self.fpriority = fpriority
        self.spriority = spriority

q = Queue.PriorityQueue()

q.put(Job(2, 5, 'Mid-level job'))
q.put(Job(2, 20, 'Low-level job'))
q.put(Job(1, 20, 'Important job'))
Run Code Online (Sandbox Code Playgroud)

现在我想要以下元素的顺序

Important job
Mid_level job
Low_level job
Run Code Online (Sandbox Code Playgroud)

我如何用一个队列创建这样的订单?

NPE*_*NPE 5

只需使用(fpriority, spriority)元组作为优先级.这将做你想要的排序(首先比较,然后第二次打破关系).


dst*_*erg 3

class Job(object):
    def __init__(self, fpriority, spriority, description, iata , hops, cost):
        self.fpriority = fpriority
        self.spriority = spriority

    def __cmp__(self, other):
        '''Comparisons for Python 2.x - it's done differently in 3.x'''
        if self.fpriority > other.fpriority:
            return 1
        elif self.fpriority < other.fpriority:
            return -1
        else:
            if self.spriority > other.spriority:
                return 1
            elif self.spriority < other.spriority:
                return -1
            else:
                return 0
Run Code Online (Sandbox Code Playgroud)