我的目标是按前十名的值对字典进行排序。使用堆似乎很合适。所以我阅读了pythons heapq并写了这个:
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]
并注意到我的错误。那么我的原始代码出了什么问题?