我只是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)}
答案 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)
答案 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)]