需明确数据结构类型及排序优先级:字典列表用sorted+lambda或cmp_to_key;元组列表按索引排序;pandas dataframe用sort_values并指定ascending;自定义类用attrgetter或lambda;itemgetter可提升性能但混合方向需分步稳定排序。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望使用CodeGeeX辅助编写Python数据排序代码,尤其是实现多字段排序功能,则需明确数据结构类型(如列表嵌套字典、元组列表或pandas DataFrame)及排序优先级。以下是针对不同数据结构的多种实现方法:
一、对字典列表按多字段升序/降序排序
该方法适用于存储为字典列表的数据,利用sorted()函数配合lambda表达式定义多级排序键,支持各字段独立指定升序或降序。
1、定义包含姓名、年龄、分数的字典列表,例如:data = [{'name': 'Alice', 'age': 25, 'score': 89}, {'name': 'Bob', 'age': 30, 'score': 78}, {'name': 'Charlie', 'age': 25, 'score': 95}]。
2、调用sorted()函数,以lambda返回元组作为key参数,其中对需降序的字段取负值或使用reverse参数组合:sorted_data = sorted(data, key=lambda x: (x['age'], -x['score']))。
3、若需更灵活控制各字段方向,改用functools.cmp_to_key与自定义比较函数:from functools import cmp_to_key;def multi_cmp(a, b): if a['age'] != b['age']: return a['age'] - b['age']; return b['score'] - a['score']; sorted_data = sorted(data, key=cmp_to_key(multi_cmp))。
二、使用operator.itemgetter进行高效多字段排序
itemgetter可避免lambda开销,提升排序性能,尤其适合大数据量场景,且天然支持多字段顺序及正向/反向组合。
1、导入operator模块:from operator import itemgetter。
2、对年龄升序、分数降序排序,构造复合key:sorted_data = sorted(data, key=itemgetter('age', 'score'), reverse=False)。
3、因itemgetter不直接支持混合方向,需先按主字段排序,再对子集稳定排序:sorted_data = sorted(sorted(data, key=itemgetter('score'), reverse=True), key=itemgetter('age'))。
三、pandas DataFrame多列排序
当数据已加载为DataFrame时,sort_values()方法提供最简洁的多字段排序接口,支持columns列表和ascending布尔列表精确控制每列方向。
1、确保已安装并导入pandas:import pandas as pd。
2、构建DataFrame:df = pd.DataFrame([{'name': 'Alice', 'age': 25, 'score': 89}, {'name': 'Bob', 'age': 30, 'score': 78}])。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
3、执行多列排序:sorted_df = df.sort_values(by=['age', 'score'], ascending=[True, False])。
4、如需就地修改原DataFrame,添加inplace=True参数:sorted_df = df.sort_values(by=['age', 'score'], ascending=[True, False], inplace=True)。
四、对元组列表按索引位置多级排序
适用于结构固定、字段位置明确的元组序列,通过索引访问元素,配合匿名函数或itemgetter实现快速排序。
1、定义元组列表:data = [('Alice', 25, 89), ('Bob', 30, 78), ('Charlie', 25, 95)]。
2、按第1项(索引1,年龄)升序、第2项(索引2,分数)降序:sorted_data = sorted(data, key=lambda x: (x[1], -x[2]))。
3、使用itemgetter替代lambda:from operator import itemgetter;sorted_data = sorted(data, key=itemgetter(1, 2), reverse=False),再对分数子序列二次稳定排序。
五、自定义类实例列表的多属性排序
当数据封装为自定义类对象时,可通过实现__lt__方法或在sorted中指定attrgetter获取属性值进行排序。
1、定义Student类并初始化实例列表:class Student: def __init__(self, name, age, score): self.name = name; self.age = age; self.score = score。
2、导入attrgetter:from operator import attrgetter。
3、按age升序、score降序排序:students = [Student('Alice', 25, 89), Student('Bob', 30, 78)];sorted_students = sorted(students, key=attrgetter('age', 'score'), reverse=False)。
4、为支持混合方向,单独提取score并取负:sorted_students = sorted(students, key=lambda s: (s.age, -s.score))。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










