如何在python中使用lambda对2个字段进行排序

时间:2018-02-11 04:40:27

标签: python python-3.x sorting lambda

我想按一个字段排序,但是如果有一个平局,我希望能够使用以lambda排序的函数使用另一个字段进行排序:

在下面的示例中。我可以按照学生的年龄排序。我想按年级排序' A'之前' B'以防万一:

student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ('mike', 'A', 12)]
print(sorted(student_tuples, key=lambda student: student[2])   )# sort by age

我的结果是:

[('dave', 'B', 10), ('jane', 'B', 12), ('mike', 'A', 12), ('john', 'A', 15)]

但我想交换Mike和Jane的订单。

请仅使用sorted和lambda。

的解决方案

3 个答案:

答案 0 :(得分:1)

您可以在排序key中创建包含优先级项目的元组:

student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ('mike', 'A', 12)]
new_tuples = sorted(student_tuples, key=lambda data:(data[-1], data[1]))

输出:

[('dave', 'B', 10), ('mike', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]

答案 1 :(得分:0)

您可以使用ord(student[1])

的值增加排序键
print(sorted(student_tuples, key=lambda student: student[2]+ord(student[1])))

打印出来:

[('dave', 'B', 10), ('mike', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]

答案 2 :(得分:0)

返回一个表示您希望它排序的顺序的值。最简单的方法是使用元组。

>>> sorted(student_tuples, key=lambda e: (e[2], e[1]))
[('dave', 'B', 10), ('mike', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]