我有一本涉及一组文件的字典。每个文档都与5个特定单词的频率相关联,我在列表中为dict中的每个值捕获了这些单词。字典看起来像这样:
docs = {'doc1': [144, 91, 1, 28, 130], 'doc2': [3, 4, 21, 59, 319], 'doc3': [4, 121, 12, 14, 23]}
现在,我希望根据这些词频对这个词典中的键进行排名。具体来说,我想对它们进行五次排名(对于五个值中的每一个)。所以doc1排名第一,doc3排名第二,等等。
然后,我想要生成文档的最终排名,它取每个文档的平均排名,然后对平均值进行排名。
我是Python的新手,在排序的dicts中有点迷失,在dicts中寻找列表等等。我将如何做到这一点?
答案 0 :(得分:1)
首先,列出完整的名单:
names = list(docs.keys()) # list() not needed in Python 2
然后,sort it using custom criteria:
sorted(names, key=lambda name: docs[name][0], reverse=True)
或者一次性全部5:
[sorted(names, key=lambda name: docs[name][ii], reverse=True) for ii in range(5)]
这给了你:
[['doc1', 'doc3', 'doc2'],
['doc3', 'doc1', 'doc2'],
['doc2', 'doc3', 'doc1'],
['doc2', 'doc1', 'doc3'],
['doc2', 'doc1', 'doc3']]
至于整体排名,您可以按照这样的总计数对其进行排名:
sorted(names, key=lambda name: sum(docs[name]), reverse=True)