我正在写一个函数,它基本上接受两个参数作为参数,一个是包含单词的列表,另一个是列表中每个单词的索引。我的排序函数没有给出我想要的输出
下面是我的代码:
from collections import defaultdict
import re
def sort_by_postings(words,index):
for key, value in sorted(index.iteritems(), key=lambda (k,v): (v,k)):
print "%s" % (key)所需输出:
>>> sort_by_postings(['a', 'b', 'c'], {'a': [0, 1], 'b': [1, 2, 3], 'c': [4]})
['c', 'a', 'b']这里首先列出了'c',因为它只出现在一个文档中,即[4],而'a'出现在两个文档中,即docID [0,1],而'b'出现在docID [1,2,3]的三个文档中
因此,基本上我希望根据这些单词的出现次数从出现次数最少到no.of出现次数最多的顺序对列表进行排序。
你们能建议对我的函数进行任何修改吗?或者你们能帮我创建一个新的函数来提供所需的输出吗?
发布于 2015-01-20 06:20:00
为什么不使用sorted和一个键来根据字典中元素的相应值的长度对列表进行排序?
>>> d={'a': [0, 1], 'b': [1, 2, 3], 'c': [4]}
>>> l=['a', 'b', 'c']
>>> sorted(l,key=lambda x : len(d[x]))
['c', 'a', 'b']发布于 2015-01-20 06:24:41
您的代码中有几个问题。
首先,对字典项进行排序,而不是对列表中的单词进行排序。
其次,代码中的排序关键字不会产生您在问题中描述的排序。要对单词列表进行排序,应使用:
sorted(words, key=lambda word: len(index[word]))第三,您的函数调用print(),而它可能应该返回一个列表。sorted()返回一个列表,因此您可以直接返回该列表。
https://stackoverflow.com/questions/28034325
复制相似问题