Python實用技法第13篇:對自定義類物件排序:attrgetter

Mark發表於2019-02-16

上一篇文章:Python實用技法第12篇:通過公共鍵對字典列表排序:itemgetter
下一篇文章:Python實用技法第14篇:根據欄位將記錄分組:itertools.groupby()

1、需求?

對自定義的類組成的列表進行排序。

2、解決方案?

內建的sorted()函式可接受一個用來傳遞可呼叫物件(callable)的引數key,而該可呼叫物件會返回待排序物件中的某些值,sorted則利用這些值來比較物件。

例項:

from operator import attrgetter
class User:
def __init__(self,userId):
self.userId=userId

def __repr__(self):
return `User({})`.format(self.userId)

users=[User(40),User(20),User(30)]
print(users)

#方法1
print(sorted(users,key=lambda u:u.userId))

#方法2
print(sorted(users,key=attrgetter(`userId`)))

執行結果:

[User(40), User(20), User(30)]
[User(20), User(30), User(40)]
[User(20), User(30), User(40)]

attrgetter通常會更快一點。上面計數同樣適用min()和max()函式。

上一篇文章:Python實用技法第12篇:通過公共鍵對字典列表排序:itemgetter
下一篇文章:Python實用技法第14篇:根據欄位將記錄分組:itertools.groupby()

相關文章