使用python对发布数量进行排序

时间:2015-01-19 22:06:47

标签: python list sorting indexing

我正在编写一个基本上接受两个参数作为参数的函数,其中一个是包含单词的列表,另一个是列表中每个单词的索引。我的排序功能并没有给我所需的输出

这是我的代码:

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]

的三个文档中找到

所以基本上我想基于这些单词的出现次数按照发生次数最少的次数排序到更多的出现次数。

你们可以建议对我的功能进行任何修改,还是可以帮我提供一个能提供所需输出的新功能..

2 个答案:

答案 0 :(得分:1)

为什么你不使用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']

答案 1 :(得分:0)

您的代码中存在多个问题。

首先,您要排序dict项而不是列表中的单词。

其次,代码中的排序键不会产生您在问题中描述的顺序。要对单词列表进行排序,您应该使用:

sorted(words, key=lambda word: len(index[word]))

第三,当函数可能返回列表时,您的函数正在调用print()sorted()返回一个列表,以便您可以返回该列表。