按分数降序、姓名升序排列记录时,两个字段的方向不同。先明确主键与次键,再构造排序键,能避免一个reverse参数把所有字段一起反转。

把规则写成有先后的句子
本例先比较分数,分数相同时才比较姓名。对数值分数取负值,可以让普通升序排序实现分数降序,而姓名仍按升序处理。这只适用于当前数值字段,不是任意类型都能取负的通用技巧。
区分新列表与原地修改
sorted返回新的列表;list.sort在原列表上排序。排序不会自动复制每条记录里的字典,后续修改记录仍需注意引用关系。名字包含不同文字时,还要明确所需排序规则,不能默认普通字符串顺序就是当地语言习惯。
用并列数据检查次键
示例故意安排两个相同分数,验证姓名次序,同时检查原始列表没有被重新排列。实际数据还可能有缺失值或混合类型,应先定义处理规则。稳定排序有帮助,但不能替你决定业务上的并列规则。
可以运行的练习
rows = [{"name": "B", "score": 90}, {"name": "A", "score": 90}, {"name": "C", "score": 80}]
ordered = sorted(rows, key=lambda row: (-row["score"], row["name"]))
assert [row["name"] for row in ordered] == ["A", "B", "C"]
assert rows[0]["name"] == "B"
print([row["name"] for row in ordered])
示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。
资料与继续学习
Python:排序技巧。资料查阅日期:2026年9月28日。步骤与练习由本站整理。
资料查阅与编辑日期:2026年9月28日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END






