Python利用operator模块实现对象的多级排序详解
发布时间 - 2026-01-11 01:02:37 点击率:次前言

最近在工作中碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能。本文介绍了Python用operator模块实现对象的多级排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:
比如我有如下的类关系,A对象引用了一个B对象,
class A(object): def __init__(self, b): self.b = b def __str__(self): return "[%s, %s, %s]" % (self.b.attr1, self.b.attr2, self.b.attr3) def __repr__(self): return "[%s, %s, %s]" % (self.b.attr1, self.b.attr2, self.b.attr3) class B(object): def __init__(self, attr1, attr2, attr3): self.attr1 = attr1 self.attr2 = attr2 self.attr3 = attr3 def __str__(self): return "[%s, %s, %s]" % (self.attr1, self.attr2, self.attr3) def __repr__(self): return "[%s, %s, %s]" % (self.attr1, self.attr2, self.attr3)
下面是测试排序代码,这里是按照A对象的内嵌对象B的attr2和attr3属性来排序。
from operator import itemgetter, attrgetter
a1 = A(B('u1', 'AAA', 100))
a2 = A(B('u2', 'BBB', 100))
a3 = A(B('u3', 'BBB', 10))
aaa = (a1, a2, a3,)
print sorted(aaa, key=attrgetter('b.attr2', 'b.attr3'))
print sorted(aaa, key=attrgetter('b.attr2', 'b.attr3'), reverse=True)
运行上面的测试,结果如下:
[[u1, AAA, 100], [u3, BBB, 10], [u2, BBB, 100]] [[u2, BBB, 100], [u3, BBB, 10], [u1, AAA, 100]]
那么,如果我需要先按b.attr2正序,再按b.attr3倒序来排序,可以使用下面组合来实现:
s = sorted(aaa, key=attrgetter('b.attr3'), reverse=True)
s = sorted(s, key=attrgetter('b.attr2'))
print s
运行结果如下:
[[u1, AAA, 100], [u2, BBB, 100], [u3, BBB, 10]]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python
# operator模块
# 多级排序
# operator排序
# Python operator模块的使用详解
# Python 中Operator模块的使用
# python函数enumerate
# operator和Counter使用技巧实例小结
# Python中operator模块的操作符使用示例总结
# Python标准库学习之operator.itemgetter函数的使用
# 相关内容
# 多个
# 我有
# 来看看
# 可以使用
# 可以实现
# 这篇文章
# 谢谢大家
# 来实现
# 在工作中
# 再按
# 内嵌
# 发现了
# 有疑问
# brush
# class
# def
# py
# object
# return
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
JS弹性运动实现方法分析
Python正则表达式进阶教程_复杂匹配与分组替换解析
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何快速配置高效服务器建站软件?
如何在Windows虚拟主机上快速搭建网站?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel Docker环境搭建教程_Laravel Sail使用指南
利用JavaScript实现拖拽改变元素大小
如何破解联通资金短缺导致的基站建设难题?
Laravel怎么清理缓存_Laravel optimize clear命令详解
JavaScript中的标签模板是什么_它如何扩展字符串功能
大连 网站制作,大连天途有线官网?
linux top下的 minerd 木马清除方法
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何在橙子建站上传落地页?操作指南详解
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
潮流网站制作头像软件下载,适合母子的网名有哪些?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何用wdcp快速搭建高效网站?
如何快速搭建个人网站并优化SEO?
如何快速搭建高效香港服务器网站?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
LinuxCD持续部署教程_自动发布与回滚机制
如何快速重置建站主机并恢复默认配置?
Laravel如何记录自定义日志?(Log频道配置)
网易LOFTER官网链接 老福特网页版登录地址
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
原生JS实现图片轮播切换效果
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel如何处理异常和错误?(Handler示例)
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何快速生成ASP一键建站模板并优化安全性?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
MySQL查询结果复制到新表的方法(更新、插入)
Laravel如何使用Blade模板引擎?(完整语法和示例)
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何用IIS7快速搭建并优化网站站点?

