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

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

相关推荐

  • Python利用matplotlib模块画图

    python语言很强大,其中matplotlib模块,具备了matlab作图的功能,该经验利用matplotlib模块作图. 操作方法 01 导入模块 import matplotlib.pyplot ...

  • python 如何安装模块

    Python作为现在非常流行的语言,可以说是非常的火了.特别是它的模块的概念,让开发者可以使用丰富的第三方模块.开发出丰富的应用,下面就跟随本教程一起来学习如何在Python中安装模块吧. pip安装 ...

  • 怎么用python的pdb模块进行调试?

    python目前可能是最流行的编程语言,比如人工智能,机器学习,神经网络等在2017年非常火的领域基本上都是和python相关的.这个指南就是简单介绍python是怎么进行简单的代码调试. 操作方法 ...

  • 如何利用python语言sysconfig模块获取系统参数

    python语言中的sysconfig模块,可以查看系统的一些参数指标:直接调用sysconfig模块自带的方法,下面利用几个实例说明sysconfig模块获取系统参数,操作如下: 操作方法 01 第 ...

  • Python中导入模块的方法

    介绍import,from...import....的用法和效果. 操作方法 01 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲 ...

  • python怎么安装模块

    操作方法 01 在安装模块之前,你首先得安装了setuptools.不懂的朋友可以参看我的经验<python怎么使用ez_setup.py  >就可以用ez_setup.py安装了setu ...

  • win7(64bit)python相关环境模块搭建

    操作方法 01 包括Python,eclipse,jdk,pydev,pip,setuptools,beautifulsoup,pyyaml,nltk,mysqldb的下载安装配置. ******** ...

  • 如何利用EXCEL对成绩排名?(排序法)

    今天小编要和大家分享的是如何利用EXCEL对成绩排名,希望能够帮助到大家. 操作方法 01 首先在我们的电脑桌面上新建一个excel表格,如下图所示. 02 然后输入一些内容,如下图所示. 03 接着 ...

  • 怎样在职称考试excel模块中实现按姓名排序

    经常要使用Excel和Word制作大量的表格.然而,在表格中的姓名栏中,往往需要设置成按照笔划排序. 工具 01 excl 操作步骤 01 在Excel中,我们可以先不按照任何顺序输入姓名,之后选中姓 ...