Python中Sorted()函数的key参数使用方法详解

小石头
小石头
发布时间:2026-10-11| 6人浏览过
原创

本文详解Python内置sorted()函数中key参数的使用方法。通过定义排序关键字函数(如lambda或自定义函数),可实现对复杂对象或特定字段的灵活排序。文章包含按属性排序、按ASCII值排序及按成绩降序排序的具体代码示例,帮助开发者掌握自定义排序逻辑。

sorted()函数与key参数基础

Python 提供了内置的 sorted() 函数,用于对序列进行排序并返回一个新的列表。该函数的基本语法如下:

sorted(iterable, /, *, key=None, reverse=False)

其中,iterable 是待排序的可迭代对象。key 和 reverse 是两个可选参数:key 用于指定一个函数,该函数将作用于每个元素以生成用于比较的键值;若未指定(默认为 None),则直接比较元素本身。reverse 参数默认为 False,表示升序排列;若设为 True,则执行降序排序。

使用key参数进行自定义排序

当排序对象为复杂结构(如元组、命名元组或字典)时,直接比较元素往往不符合预期。此时,通过 key 参数指定提取排序依据的函数,可以实现更精细的控制。

按命名元组属性排序

假设我们需要对一组人物信息进行排序,可以使用 collections.namedtuple 定义数据结构,并通过 key 参数指定按年龄或姓名首字母排序。

from collections import namedtuple

# 构造一个命名元组类型
Person = namedtuple('Person', ['name', 'age', 'gender'])

# 创建一个 Person 的列表
people = [
    Person('Alice', 22, 'F'),
    Person('Bob', 35, 'M'),
    Person('Charlie', 28, 'M'),
    Person('David', 28, 'M'),
    Person('Eva', 21, 'F')
]

# 按年龄进行升序排序
people_by_age = sorted(people, key=lambda p: p.age)
print(people_by_age)

# 按姓名的首字母进行降序排序
people_by_first_letter = sorted(people, key=lambda p: p.name[0], reverse=True)
print(people_by_first_letter)

运行上述代码,输出结果如下:

[Person(name='Eva', age=21, gender='F'), Person(name='Alice', age=22, gender='F'), Person(name='Charlie', age=28, gender='M'), Person(name='David', age=28, gender='M'), Person(name='Bob', age=35, gender='M')]
[Person(name='Eva', age=21, gender='F'), Person(name='David', age=28, gender='M'), Person(name='Charlie', age=28, gender='M'), Person(name='Bob', age=35, gender='M'), Person(name='Alice', age=22, gender='F')]

在第一个示例中,lambda p: p.age 提取了每个人的年龄作为排序键;在第二个示例中,lambda p: p.name[0] 提取了姓名的首字母,并结合 reverse=True 实现了按首字母降序排列。

使用自定义函数进行排序

除了使用 lambda 表达式,还可以定义独立的函数作为 key 参数的值。这种方法在逻辑复杂时更具可读性。

# 定义一个包含学生信息的列表
students = [('Alice', 95), ('Bob', 83), ('Charlie', 72), ('David', 90), ('Eva', 87)]

# 使用一个自定义的函数,对学生信息按照成绩降序排序
def sort_by_score(student):
    return student[1]

students_sorted_by_score = sorted(students, key=sort_by_score, reverse=True)
print(students_sorted_by_score)

在此示例中,sort_by_score 函数从元组中提取第二个元素(即成绩)作为排序依据。最终输出结果为:

[('Alice', 95), ('David', 90), ('Eva', 87), ('Bob', 83), ('Charlie', 72)]

通过这种方式,开发者可以灵活地定义任何复杂的排序逻辑,而不仅限于简单的字段比较。

总结

掌握 sorted() 函数的 key 参数,是处理复杂数据结构排序的关键。无论是使用 lambda 还是自定义函数,核心思路都是提取出用于比较的“键”,从而实现按特定规则排序。以上就是Python中Sorted()函数的key参数使用方法详解的详细内容,更多关于Python排序技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。