Создание очереди с приоритетом Python - PullRequest
0 голосов
/ 22 июля 2010

Я хотел бы построить приоритетную очередь в python, в которой очередь содержит разные словари с их номерами приоритетов.Поэтому, когда вызывается функция «get», словарь с наивысшим приоритетом (наименьшим номером) будет извлечен из очереди, а когда вызывается «add function», новый словарь будет добавлен в очередь и отсортирован по егономер приоритета.

Пожалуйста, помогите ...

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 22 июля 2010

Используйте модуль 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
2 голосов
/ 22 июля 2010

Это то, что я обычно представляю в качестве побочной заметки в некоторых из моих лекций:

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]

Требования ОП, по-видимому, должны использовать operator.itemgetter('priority') в качестве аргумента key при создании экземпляра PriorityQueue (конечно, требуется import operator в верхней части модуля; -).

0 голосов
/ 22 июля 2010

Вы можете сделать это, добавив объект dict к классу, и поискать его внутри.

...