如何对多个字段按不同要求排序?

2019-05-13 16:00:07 +08:00
 oldbird

a=[('a',1,3,'f'),('b',1,2,'f'),('c',3,1,'m')]

要求按 4 升序、1 降序、2 升序、3 降序的优先规则进行排序

请问该如何写,谢谢。

1298 次点击
所在节点    Python
1 条回复
xpresslink
2019-05-13 16:58:53 +08:00
from functools import cmp_to_key

def keyfunc(x,y):
□□□□if x[3] > y[3]:
□□□□□□□□return 1
□□□□elif x[3] < y[3]:
□□□□□□□□return -1
□□□□elif x[0] < y[0]:
□□□□□□□□return 1
□□□□elif x[0] > y[0]:
□□□□□□□□return -1
□□□□elif x[1] > y[1]:
□□□□□□□□return 1
□□□□elif x[1] < y[1]:
□□□□□□□□return -1
□□□□elif x[2] < y[2]:
□□□□□□□□return 1
□□□□elif x[2] > y[2]:
□□□□□□□□return -1
□□□□else:
□□□□□□□□return 0

a=[('a',1,3,'f'),('b',1,2,'f'),('c',3,1,'m')]

print(sorted(a, key=cmp_to_key(keyfunc)))

# [('b', 1, 2, 'f'), ('a', 1, 3, 'f'), ('c', 3, 1, 'm')]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/563689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX