创建python优先级队列

时间:2010-07-22 17:13:30

标签: python priority-queue task-queue

我想在python中构建一个优先级队列,其中队列包含不同的字典及其优先级编号。因此,当调用“get function”时,具有最高优先级(最低编号)的字典将被拉出队列,并且当调用“add function”时,新字典将被添加到队列中并基于其排序优先号码。

请帮帮忙......

提前致谢!

3 个答案:

答案 0 :(得分:6)

使用标准库中的heapq模块。

您没有指定如何将优先级与词典相关联,但这是一个简单的实现:

import heapq

class MyPriQueue(object):
    def __init__(self):
        self.heap = []

    def add(self, d, pri):
        heapq.heappush(self.heap, (pri, d))

    def get(self):
        pri, d = heapq.heappop(self.heap)
        return d

答案 1 :(得分:2)

这就是我在一些模式谈话中作为旁注通常出现的内容:

class PriorityQueue(object):
 def __init__(self, key=lambda x: x):
   self.l = []
   self.key = key
 def __len__(self):
   return len(self.l)
 def push(self, obj):
   heapq.heappush(self.l, (self.key(obj), obj))
 def pop(self):
   return heapq.heappop(self.l)[-1]

OP的要求显然是在实例化operator.itemgetter('priority')时使用key作为PriorityQueue参数(当然,模块顶部需要import operator; - )。< / p>

答案 2 :(得分:0)

您可以通过向类中添加dict对象并在其中进行搜索来完成此操作。