欢迎访问宙启技术站
智能推送

如何使用 Python 的 sorted() 函数按照条件排序列表?

发布时间:2023-06-21 08:58:19

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()函数可以非常灵活地实现对列表元素的排序,只需要根据具体需求指定相应的排序规则即可。