【问题标题】:Sorting with respect to number of postings using python使用python根据帖子数量排序
【发布时间】:2015-03-18 00:44:25
【问题描述】:

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

这是我的代码:

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' 存在于三个文档ID 为@987654328 的文档中@

所以基本上我想根据这些单词的出现次数对列表进行排序,按照出现次数最少到出现次数更多的顺序。

你们能否建议对我的函数进行任何修改,或者你能帮助我提供一个提供所需输出的新函数..

【问题讨论】:

    标签: python list sorting indexing


    【解决方案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']
    

    【讨论】:

      【解决方案2】:

      你的代码有几个问题。

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

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

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

      第三,您的函数调用print(),而它可能应该返回一个列表。 sorted() 返回一个列表,所以你可以直接返回它。

      【讨论】:

        猜你喜欢
        • 2012-09-01
        • 2020-01-30
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 2016-12-22
        • 1970-01-01
        • 2015-02-12
        相关资源
        最近更新 更多