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快速搭建并优化网站站点?