使用列表

时间:2017-04-23 11:44:30

标签: python dictionary

我有一本涉及一组文件的字典。每个文档都与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中寻找列表等等。我将如何做到这一点?

1 个答案:

答案 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)