MST
星途 面试题库

面试题:Python中sorted对列表排序灵活性之复杂场景

给定一个复杂列表`complex_list = [{'name': 'Alice', 'age': 25, 'score': 85}, {'name': 'Bob', 'age': 22, 'score': 90}, {'name': 'Charlie', 'age': 28, 'score': 80}]`,请使用`sorted`函数先按`age`从大到小排序,若`age`相同则按`score`从小到大排序。说明在此过程中`sorted`排序灵活性的运用方式以及背后的原理。
45.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现
complex_list = [{'name': 'Alice', 'age': 25,'score': 85}, {'name': 'Bob', 'age': 22,'score': 90}, {'name': 'Charlie', 'age': 28,'score': 80}]
sorted_list = sorted(complex_list, key=lambda x: (-x['age'], x['score']))
print(sorted_list)
  1. sorted排序灵活性运用方式
    • sorted函数的key参数可以接受一个函数,这个函数定义了排序的依据。在这里,使用了一个匿名函数(lambda函数)。
    • 匿名函数lambda x: (-x['age'], x['score']),表示对于列表中的每个字典元素x,首先根据age字段从大到小排序(通过在age前加负号实现),如果age相同,则根据score字段从小到大排序。
  2. 背后原理
    • sorted函数在排序时,会对可迭代对象中的每个元素应用key指定的函数,得到一个“键值”。
    • 然后根据这些“键值”进行排序。由于这里返回的是一个元组(-x['age'], x['score']),在Python中,元组比较是从左到右依次进行的,所以先比较-x['age']实现按age从大到小排序,若age相同,再比较x['score']实现按score从小到大排序。