我想在python中构建一个优先级队列,队列中包含不同的字典和它们的优先级编号。因此,当调用"get function“时,具有最高优先级(最低编号)的字典将被从队列中拉出,而当调用"add function”时,新字典将被添加到队列中,并根据其优先级编号进行排序。
请帮帮忙..。
提前感谢!
发布于 2010-07-23 01:15:19
使用标准库中的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发布于 2010-07-23 01:47:40
这是我通常在我的一些模式演讲中作为附注介绍的内容:
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的要求显然是在实例化PriorityQueue时使用operator.itemgetter('priority')作为key参数(当然,在模块顶部需要一个import operator;-)。
发布于 2010-07-23 01:27:39
您可以通过将dict对象添加到类中并在其中进行搜索来完成此操作。
https://stackoverflow.com/questions/3311480
复制相似问题