gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python利用operator模块实现对象的多级排序详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

最近在工作中碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能。本文介绍了Python用operator模块实现对象的多级排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

比如我有如下的类关系,A对象引用了一个B对象, 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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属性来排序.

?
1
2
3
4
5
6
7
8
9
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 )

运行上面的测试,结果如下:

?
1
2
[[u1, AAA, 100 ], [u3, BBB, 10 ], [u2, BBB, 100 ]]
[[u2, BBB, 100 ], [u3, BBB, 10 ], [u1, AAA, 100 ]]

那么,如果我需要先按b.attr2正序,再按b.attr3倒序来排序,可以使用下面组合来实现:

?
1
2
3
s = sorted (aaa, key = attrgetter( 'b.attr3' ), reverse = True )
s = sorted (s, key = attrgetter( 'b.attr2' ))
print s

运行结果如下:

?
1
[[u1, AAA, 100 ], [u2, BBB, 100 ], [u3, BBB, 10 ]]

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我的支持.

原文链接:http://blog.csdn.net/kongxx/article/details/71122953 。

最后此篇关于Python利用operator模块实现对象的多级排序详解的文章就讲到这里了,如果你想了解更多关于Python利用operator模块实现对象的多级排序详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com