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中间件编写与应用流程