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