如何使用 Python 的 sorted() 函数按照条件排序列表?
Python内建的sorted()函数可以用来对列表的元素进行排序。该函数的语法如下所示:
sorted(iterable, key=None, reverse=False)
其中,iterable是待排序列表,key是函数,用来指定排序的依据,默认值为None。reverse是一个布尔值,用来控制是否倒序排序,默认为False。
下面是一个示例,展示如何使用sorted()函数按照条件排序列表:
假设我们有一个列表students,包含多个字典,每个字典记录一个学生的成绩和姓名:
students = [
{'name': 'Tom', 'score': 90},
{'name': 'Jerry', 'score': 86},
{'name': 'Bob', 'score': 95},
{'name': 'Alice', 'score': 80},
{'name': 'Lucy', 'score': 92},
]
如果我们要按照学生的成绩从高到低排序,可以通过指定key参数来实现:
sorted_students = sorted(students, key=lambda x:x['score'], reverse=True)
其中,lambda表达式用来指定排序的规则,这里表示按照学生成绩进行排序。reverse=True用来将结果倒序输出,即按照从高到低的顺序排列。
打印sorted_students,得到按照成绩从高到低排序的结果:
[{'name': 'Bob', 'score': 95},
{'name': 'Lucy', 'score': 92},
{'name': 'Tom', 'score': 90},
{'name': 'Jerry', 'score': 86},
{'name': 'Alice', 'score': 80}]
如果我们要按照学生的姓名进行排序,可以修改key参数为'name',如下所示:
sorted_students = sorted(students, key=lambda x:x['name'])
这里排序的规则指定为按照学生姓名进行排序,得到按照姓名排序的结果:
[{'name': 'Alice', 'score': 80},
{'name': 'Bob', 'score': 95},
{'name': 'Jerry', 'score': 86},
{'name': 'Lucy', 'score': 92},
{'name': 'Tom', 'score': 90}]
我们还可以将排序条件进行组合,例如按照成绩从高到低排序,对于成绩相同的同学再按照姓名进行排序,可以如下所示:
sorted_students = sorted(students, key=lambda x:(-x['score'], x['name']))
其中,lambda表达式中使用了一个元组,表示按照成绩从高到低进行排序,对于成绩相同的同学再按照姓名排序。使用减号将成绩取负,是为了实现按照从高到低的顺序排列。
得到按照成绩从高到低、对于成绩相同的同学再按照姓名排序的结果:
[{'name': 'Bob', 'score': 95},
{'name': 'Lucy', 'score': 92},
{'name': 'Tom', 'score': 90},
{'name': 'Jerry', 'score': 86},
{'name': 'Alice', 'score': 80}]
总之,sorted()函数可以非常灵活地实现对列表元素的排序,只需要根据具体需求指定相应的排序规则即可。
