在python中为dict添加排名

时间:2014-05-13 20:32:54

标签: python sorting python-3.x dictionary

假设我的内容如下所示:

leaderboard = {"James": 4, "Tom": 2, "Tim": 8, "Jim": 2}

我如何获得每个名字的排名,以便具有相同分数的人具有相同的排名?

  Tim: 1
James: 2
  Tom: 3
  Jim: 3

3 个答案:

答案 0 :(得分:2)

只是按值对项目进行排序,循环遍历它们并仅在值严格小于前一个值时才增加排名。

答案 1 :(得分:2)

你正在寻找从名称反对映射:排名到排名:名称。 https://stackoverflow.com/a/485368/183948有你的答案。

inv_map = {}
for k, v in leaderboard.items():
    inv_map[v] = inv_map.get(v, [])
    inv_map[v].append(k)

在此之后,您可以对此inv_map的值进行排序,以获得您要查找的内容。

答案 2 :(得分:0)

您可以使用内置排序函数以及lambda函数来按值而不是字典键对字典进行排序。然后我们可以简单地通过for循环来分配排名。这段代码可能没有优化,但它可以工作,你可以找到如何优化你自己的for循环。排名的dict将保持人们的排名,如果你也愿意,你也可以把它列入一个列表。

sorted_by_value = sorted(learderboard, key = lambda x: leaderboard[x], reverse = True)

rank = 1
last_value = leaderboard[sorted_by_value[0]]
ranked_dict = dict()
for name in sorted_by_value:
    this_value = leaderboard[name]
    if this_value != last_value:
        rank += 1
    ranked_dict[name] = rank
    last_value = this_value