005_003 Python 根據物件的屬性將物件排序
阿新 • • 發佈:2018-12-31
程式碼如下:
#encoding=utf-8 print '中國' #根據物件的屬性將物件排序 def sort_by_attr(seq,attr): intermed=[(getattr(x,attr),i,x) for i,x in enumerate(seq)] intermed.sort() return [x[-1] for x in intermed] def sort_by_attr_inplace(lst,attr): lst[:]=sort_by_attr(lst,attr) #DSU內部方式 import operator def sort_by_attr2(seq,attr): return sorted(seq,key=operator.attrgetter(attr)) def sort_by_attr_inplace2(lst,attr): lst.sort(key=operator.attrgetter(attr)) class Person: def __init__(self,name,pID): self.name=name self.pID=pID def printme(self): print self.name,self.pID def printPer(lst): for per in lst: per.printme() lsta=[Person('hyj',1),Person('abc',2),Person('def',3)] printPer(lsta) print '-----sort_by_attr' lstb=sort_by_attr(lsta,'name') printPer(lstb) print '-----sort_by_attr_inplace' sort_by_attr_inplace(lsta,'name') printPer(lsta) print '-----sort_by_attr2' listb=sort_by_attr2(lsta,'pID') printPer(listb) print '-----sort_by_attr_inplace2' sort_by_attr_inplace2(lsta,'pID') printPer(lsta)
列印結果如下:
中國
hyj 1
abc 2
def 3
-----sort_by_attr
abc 2
def 3
hyj 1
-----sort_by_attr_inplace
abc 2
def 3
hyj 1
-----sort_by_attr2
hyj 1
abc 2
def 3
-----sort_by_attr_inplace2
hyj 1
abc 2
def 3