我的目标是按前十名的值对字典进行排序。使用堆似乎是合适的。所以我读了关于Pythonheapq的文章,写下了:
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)
它给出了几乎正确的结果,如此接近事实上,我没有注意到它是错误的。在
过了一会儿,我用一些借来的代码对它进行了测试:
^{pr2}$注意到我的错误。我的原始代码出了什么问题?在
堆中的前10个条目并不总是包含最低的10个键。为了得到最低的10次,你必须从(整个)堆中弹出10次。在
(如果前N个条目总是包含N个最低的条目,那么您将得到一个排序列表,而不是一个堆!)在
一般来说,不要使用heapq函数修改表示堆的列表。在
相关问题 更多 >
编程相关推荐