Python排名字典返回排名

use*_*440 4 python

我有一个python字典:

x = {'a':10.1,'b':2,'c':5}

我如何进行排名并返回排名值?喜欢回来:

res = {'a':1,c':2,'b':3}

谢谢

编辑:

我不是要尝试排序,因为可以通过sortedpython中的函数来完成.我更考虑将等级值从最高到最小......所以在排序后用字符值替换字典值.1表示最高,3表示最低.

DSM*_*DSM 14

如果我理解正确,您可以简单地使用sorted获取订单,然后enumerate对它们进行编号:

>>> x = {'a':10.1, 'b':2, 'c':5}
>>> sorted(x, key=x.get, reverse=True)
['a', 'c', 'b']
>>> {key: rank for rank, key in enumerate(sorted(x, key=x.get, reverse=True), 1)}
{'b': 3, 'c': 2, 'a': 1}
Run Code Online (Sandbox Code Playgroud)

请注意,这假设排名是明确的.如果你有联系,绑定键之间的排名顺序将是任意的.使用类似方法也很容易处理,例如,如果您希望所有绑定的键具有相同的等级.我们有

>>> x = {'a':10.1, 'b':2, 'c': 5, 'd': 5}
>>> {key: rank for rank, key in enumerate(sorted(x, key=x.get, reverse=True), 1)}
{'a': 1, 'b': 4, 'd': 3, 'c': 2}
Run Code Online (Sandbox Code Playgroud)

>>> r = {key: rank for rank, key in enumerate(sorted(set(x.values()), reverse=True), 1)}
>>> {k: r[v] for k,v in x.items()}
{'a': 1, 'b': 3, 'd': 2, 'c': 2}
Run Code Online (Sandbox Code Playgroud)


小智 0

首先按字典中的值排序,然后分配排名。确保反向排序,然后重新创建带有排名的字典。

从之前的回答:

import operator
x={'a':10.1,'b':2,'c':5}
sorted_x = sorted(x.items(), key=operator.itemgetter(1), reversed=True)
out_dict = {}
for idx, (key, _) in enumerate(sorted_x):
    out_dict[key] = idx + 1
print out_dict
Run Code Online (Sandbox Code Playgroud)