我想对文档进行排名并将它们存储在python的列表中

时间:2010-06-29 17:03:39

标签: python sorting

我只是python的初学者。我有文档score= {1:0.98876, 8:0.12245, 13:0.57689},它存储在字典中。键对应于一系列文档id,并且值对应于每个文档id的分数。如何根据分数对文档进行排名?

inverse=[(value, key) for key, value in score.items()]
fmax=max(inverse)

我已经使用上面返回的方法找到了最大值:

(0.98876,1)

但我想要的是对文件进行排名并存储在列表中:

{(0.98876,1),(0.57689,13),(0.12245,8)}

6 个答案:

答案 0 :(得分:3)

sorted(score.items(), key=lambda x:-x[1])

应该做的伎俩

未定义字典中元素的顺序,因此排序结果必须存储在列表中(或OrderedDict)。

您应该使用items()将其转换为元组列表。使用sorted()可以对它们进行排序,key参数告诉它根据第二个元组元素的反转进行排序。

完整示例:

>>> score= {1:0.98876, 8:0.12245, 13:0.57689}
>>> sorted(score.items(), key=lambda x:-x[1])
[(1, 0.98875999999999997), (13, 0.57689000000000001), (8, 0.12245)]
>>> print [(y,x) for (x,y) in _]
[(0.98875999999999997, 1), (0.57689000000000001, 13), (0.12245, 8)]

如果你真的想这样做,这也说明了如何反转元组中的元素。

答案 1 :(得分:2)

如果您想修改原始列表inverse,请使用inverse.sort(reverse=True) 如果要生成新列表并保持原始列表不变,请使用sorted(inverse, reverse=True)

您不需要中间列表,但只需使用score

>>> sorted(score.items(), key=lambda x: x[1], reverse=True)
[(1, 0.98876), (13, 0.57689), (8, 0.12245)]

答案 2 :(得分:0)

在你的逆方法之后,这就可以了:

ranked = inverse.sort()

以下是有关python排序的更多信息:http://wiki.python.org/moin/HowTo/Sorting/

答案 3 :(得分:0)

对逆列表进行排序:

inverse.sort()

这将按升序返回列表,如果您想以相反的顺序,则也将其反转:

inverse.reverse()

答案 4 :(得分:0)

使用这个: inverse.sort(reverse=True)

有关排序

的更多信息,请查看here

答案 5 :(得分:0)

如果你想在dict中排名项目:

score = {1:0.98876, 8:0.12245, 13:0.57689}
# get a list of items...
list = score.items()
print list
[(8, 0.12245), (1, 0.98875999999999997), (13, 0.57689000000000001)]

# Sort items.
list.sort()
print list 
[(1, 0.98875999999999997), (8, 0.12245), (13, 0.57689000000000001)]
# reverse order
list.reverse()
print list
[(13, 0.57689000000000001), (8, 0.12245), (1, 0.98875999999999997)]