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 】
相关推荐:
C语言设计一个闪闪的圣诞树
C#如何调用原生C++ COM对象详解
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Python面向对象测试方法_mock解析【教程】
Laravel怎么实现验证码(Captcha)功能
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
jquery插件bootstrapValidator表单验证详解
Laravel如何实现本地化和多语言支持?(i18n教程)
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何确保FTP站点访问权限与数据传输安全?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
网站制作软件有哪些,制图软件有哪些?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel怎么在Controller之外的地方验证数据
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel storage目录权限问题_Laravel文件写入权限设置
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
移动端脚本框架Hammer.js
Laravel定时任务怎么设置_Laravel Crontab调度器配置
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何制作一个表白网站视频,关于勇敢表白的小标题?
焦点电影公司作品,电影焦点结局是什么?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何用狗爹虚拟主机快速搭建网站?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
利用python获取某年中每个月的第一天和最后一天
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何处理异常和错误?(Handler示例)
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何用PHP快速搭建高效网站?分步指南
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel如何使用Eloquent进行子查询
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何在服务器上配置二级域名建站?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
如何在阿里云通过域名搭建网站?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程

