我有一本python字典:
x = {'a':10.1,'b':2,'c':5}
如何进行排名和返回排名值?就像回来一样:
res = {'a':1,c':2,'b':3}
谢谢
编辑:
我不打算进行排序,因为这可以通过python中的sorted函数来完成。我更多地考虑从最高到smallest...so的排名值,在排序后用它们的位置替换字典的值。1表示最高,3表示最低。
发布于 2015-05-17 10:15:52
如果我理解正确的话,您可以简单地使用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}请注意,这假设等级是明确的。如果你有领带,绑定的键之间的排名顺序将是任意的。使用类似的方法也很容易处理,例如,如果您希望所有绑定的键具有相同的等级。我们有
>>> 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}但
>>> 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}发布于 2019-09-17 21:00:16
[ins] In [55]: from scipy.stats import rankdata
[ins] In [56]: x = {'a':10.1, 'b':2, 'c': 5, 'd': 5}
[ins] In [57]: dict(zip(x.keys(), rankdata([-i for i in x.values()], method='min')))
Out[57]: {'a': 1, 'b': 4, 'c': 2, 'd': 2}
[ins] In [58]: dict(zip(x.keys(), rankdata([-i for i in x.values()], method='max')))
Out[58]: {'a': 1, 'b': 4, 'c': 3, 'd': 3}@beta,@DSM scipy.stats.rankdata有一些其他的领带“方法”,可能也更适合你想要做的领带。
发布于 2015-05-17 10:14:58
首先按字典中的值排序,然后分配等级。确保颠倒排序,然后使用等级重新创建字典。
根据前面的答案:
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_dicthttps://stackoverflow.com/questions/30282600
复制相似问题