Python中优先级较高的优先级队列

时间:2013-02-27 22:52:04

标签: python queue priority-queue

我需要一个优先级队列,首先获取具有最高优先级值的项目。我目前正在使用Queue库中的PriorityQueue类。但是,此函数仅返回具有最低值的项目。我尝试了一些丑陋的解决方案,如(sys.maxint - priority)作为优先级,但只是想知道是否存在更优雅的解决方案。

2 个答案:

答案 0 :(得分:16)

使用否定优先级,无需从sys.maxint中减去。

queue.put((-priority, item))

优先级为-10的项目将在优先级为-5的项目之前返回,例如。

答案 1 :(得分:0)

您可以扩展优先级队列以保持逻辑不变:

from Queue import PriorityQueue

class DualPriorityQueue(PriorityQueue):
    def __init__(self, maxPQ=False):
        PriorityQueue.__init__(self)
        self.reverse = -1 if maxPQ else 1

    def put(self, priority, data):
        PriorityQueue.put(self, (self.reverse * priority, data))

    def get(self, *args, **kwargs):
        priority, data = PriorityQueue.get(self, *args, **kwargs)
        return self.reverse * priority, data


minQ = DualPriorityQueue()
maxQ = DualPriorityQueue(maxPQ=True)

minQ.put(10, 'A')
minQ.put(100, 'A')


maxQ.put(10, 'A')
maxQ.put(100,'A')

print "Min DQ: {}".format(minQ.get())
print "Max DQ: {}".format(maxQ.get())

输出:

Min DQ: (10, 'A')
Max DQ: (100, 'A')