3 回答

TA贡献1818条经验 获得超11个赞
从文档:
reverse是一个布尔值。如果设置为True,则对列表元素进行排序,就好像每个比较都被反转一样。
因此,您想要的是类似以下内容的东西:
d.sort(key=lambda x: (x[0], -x[1]))
如果x[1]不是数字,请尝试:
d.sort(key=lambda x: x[1], reverse=True)
d.sort(key=lambda x: x[0])

TA贡献1942条经验 获得超3个赞
(可能会过大,但是..)使用pandas和args ascending=[True, False]:
d = [[1,2], [2,2], [2,3], [2,4], [3,1]]
df= pd.DataFrame(d)
sorted_values = df.sort_values(by=[0,1], ascending=[True,False])
sorted_list = sorted_values.agg(list,1).tolist()
[[1, 2], [2, 4], [2, 3], [2, 2], [3, 1]]

TA贡献1804条经验 获得超3个赞
我的解决方案:
from itertools import groupby, chain
l = ((1, 'b'),
(1, 'd'),
(2, 'a'),
(1, 'a'))
def sort_multi(lst, index_normal, index_reversed):
return list(chain.from_iterable([sorted(list(j), key=lambda v:v[index_reversed], reverse=True) for i, j in groupby(sorted(lst), key=lambda v:v[index_normal])]))
print(sort_multi(l, 0, 1))
输出:
[(1, 'd'), (1, 'b'), (1, 'a'), (2, 'a')]
添加回答
举报