MST

星途 面试题库

面试题:Python列表的复杂排序及应用

假设有一个列表,其中每个元素是一个字典,字典包含'name'(字符串类型)和'age'(整数类型)两个键值对。要求按照'age'从大到小排序,如果'age'相同,则按照'name'的字典序从小到大排序。请编写Python代码实现该功能,并解释排序算法的原理。
43.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
students = [
    {'name': 'Alice', 'age': 20},
    {'name': 'Bob', 'age': 18},
    {'name': 'Charlie', 'age': 20}
]

students.sort(key=lambda x: (-x['age'], x['name']))
print(students)

排序算法原理

  1. sort方法:Python列表的sort方法是一种高效的排序算法,通常是TimsortTimsort是一种自适应的、稳定的排序算法,结合了归并排序和插入排序的优点。它会根据数据的特点自动选择更合适的排序策略,在大多数情况下都有很好的性能表现。
  2. key参数sort方法的key参数接受一个函数,该函数用来指定排序的依据。这里我们使用lambda表达式创建了一个匿名函数lambda x: (-x['age'], x['name'])。这个函数接受列表中的每个字典元素x,返回一个元组(-x['age'], x['name'])
  3. 排序依据:排序时会按照这个元组进行,首先比较元组的第一个元素-x['age'],这里通过对age取负,使得原本从小到大的排序变为从大到小。如果age相同,再比较元组的第二个元素x['name'],因为字符串比较默认是按照字典序,所以会实现name字典序从小到大的排序。这样就满足了题目按照age从大到小排序,如果age相同,则按照name字典序从小到大排序的要求。