Python利用operator模块实现对象的多级排序详解

作者:kongxx 时间:2023-09-26 20:11:09 

前言

最近在工作中碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了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]]

来源:http://blog.csdn.net/kongxx/article/details/71122953

标签:python,operator模块,多级排序
0
投稿

猜你喜欢

  • Python基于Opencv识别两张相似图片

    2021-01-13 20:16:42
  • python计算二维矩形IOU实例

    2022-03-07 23:40:18
  • 在python里创建一个任务(Task)实例

    2023-09-12 23:24:16
  • HTML与javascript中常用编码浅析

    2008-12-23 12:20:00
  • PHP json格式和js json格式 js跨域调用实现代码

    2023-11-22 05:20:18
  • 全面了解python字符串和字典

    2021-05-03 21:06:43
  • Python爬取腾讯疫情实时数据并存储到mysql数据库的示例代码

    2024-01-23 08:52:28
  • 对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!

    2024-04-28 09:43:23
  • php mysql获取表字段名称和字段信息的三种方法

    2023-11-18 22:47:26
  • 用Python绘制一个仿黑洞图像

    2021-10-03 03:07:57
  • GoLang 中的随机数的示例代码

    2024-04-26 17:16:51
  • 妙用Dreamweaver MX共享Word XP文件

    2010-09-05 21:17:00
  • Oracle数据泵的导入与导出实例详解

    2024-01-17 00:10:09
  • JavaScript实现简单计算器小功能

    2024-04-23 09:26:50
  • asp如何遍历目录及目录下的文件?

    2009-11-11 17:55:00
  • Pytest mark使用实例及原理解析

    2021-02-27 14:30:11
  • python文本进度条实例

    2023-05-15 17:18:16
  • PHP实现git部署的方法教程

    2023-07-17 05:30:33
  • 关于Flask项目无法使用公网IP访问的解决方式

    2021-01-03 10:04:00
  • 源码解析gtoken替换jwt实现sso登录

    2024-04-30 09:59:54
  • asp之家 网络编程 m.aspxhome.com