Python 按照多个键进行排序

在 Python 中,可以使用 list.sort()sorted(list) 对列表进行排序,而且可以使用 key 参数使列表按照一定的键值来排序。

有一些情况下,需要首先对列表按照键值1来进行排序,排序后有多个元素的键值1相等,在每批键值1相等的元素当中,需要再按照键值2进行排序,甚至后续还有更多用以排序的键值。此时可以把 key 参数中 lambda 表达式的返回值修改为一个元组,其中元组的每个元素依次是需要依据排序的键值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from pprint import pprint

lst = [
(2, 1),
(1, 2),
(1, 3),
(1, 1)
]

pprint(sorted(lst), key=lambda x: x[0])
# 此时仅对第一个元素进行排序
# [
# (1, 2),
# (1, 3),
# (1, 1),
# (2, 1)
# ]

pprint(sorted(lst), key=lambda x: (x[0], x[1]))
# 此时先对第一个元素进行排序,在第一个元素相同的情况下,按第二个元素进行排序
# [
# (1, 1),
# (1, 2),
# (1, 3),
# (2, 1)
# ]