我想按一个字段排序,但是如果有一个平局,我希望能够使用以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。
的解决方案答案 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)]