0
我的目標是按照前十名的值對字典進行排序。使用堆似乎很合適。所以,我對蟒蛇heapq讀了寫了這樣:瞭解heapq push pop
def top_ten_hash_tags(ranked_hash_tags):
desc_hash_tags = []
for hash_tag, rank in ranked_hash_tags.items():
heapq.heappush(desc_hash_tags, (rank, hash_tag))
top_ten = desc_hash_tags[0:10]
while top_ten:
i = heapq.heappop(top_ten)
rank, hash_tag = i[0], i[1]
print hash_tag.encode('utf-8'), (rank *-1.0)
它給了近正確的結果,所以接近事實,我沒有注意到這是錯誤的。
一點我測試了對一些借來的代碼之後:
sorted_tags = sorted(ranked_hash_tags.iteritems(), key=operator.itemgetter(1), reverse=True)
for i in sorted_tags[0:10]:
print i[0].encode('utf-8'), i[1]
,發現我的錯誤。那麼我的原始代碼出了什麼問題?
你從'top_ten'彈出,但從不在函數中定義它。它的價值是什麼? – 2013-05-11 21:45:33
@MartijnPieters好趕上,我更新它。現在我看到它了,我的直覺是因爲我切掉了頂層元素,也許堆沒有......重新提取整個值。 – 2013-05-11 21:58:49