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