在不破坏Python关系的情况下排列列表

Rod*_*phe 1 python list ranking python-2.7

我需要将rank归因于列表的元素,同时确保绑定元素获得相同的排名.

例如:

data = [[1],[3],[2],[2]]

c = 0

for i in sorted(data, reverse=True):
    i.append(c+1)
    c += 1

print data
Run Code Online (Sandbox Code Playgroud)

收益:

[[1, 4], [3, 1], [2, 2], [2, 3]]
Run Code Online (Sandbox Code Playgroud)

排名附加到分数的位置.

我需要更改为这个简单的代码,而不是获取:

[[1, 3], [3, 1], [2, 2], [2, 2]]
Run Code Online (Sandbox Code Playgroud)

得分为2的元素被绑定并且两者都获得第二名,而前面第四名的1被提升到第三名?

fal*_*tru 5

使用itertools.groupby,enumerate:

>>> from itertools import groupby
>>> data = [[1],[3],[2],[2]]
>>> sorted_data = sorted(data, reverse=True)
>>> for rank, (_, grp) in enumerate(groupby(sorted_data, key=lambda xs: xs[0]), 1):
...     for x in grp:
...         x.append(rank)
...
>>> print data
[[1, 3], [3, 1], [2, 2], [2, 2]]
Run Code Online (Sandbox Code Playgroud)