最終的に、私がしたいのは、スコアに基づいてトップ10の項目のリストを返すことです。私はheapqを使用して一種のプライオリティキューを実装しようとすると、これまでのところ、私が持っているものであるのです。私はkey=lambda s: s[0]
でやっていることは(score, item_name)
からscore
に基づいてヒープをソートするためにしようとしているタプルの最初の値に基づいてPythonのheapq.nlargest()で値を取得
class my_queue:
# heap-based priority queue for top items
def __init__(self):
self.top_items = []
def push_item(self, item):
score = item.get_score()
item_name = item.get_name()
heapq.heappush(self.top_items, (score, item_name))
def top_ten(self):
top_ten_items = heapq.nlargest(10, self.top_items, key=lambda s: s[0])
print top_ten_items
。ここにある構造に基づいてこれを達成する簡単な方法はありますか?
ありがとうございました。これは、コールheapq.nlargest(10, self.top_items)
が再びすべての項目をソートし、あなたがheap
データ構造の何のメリットを持っていないことを意味
sorted(iterable, key=key, reverse=True)[:n]
: