排序沒有本地比較支援的物件

2021-10-04 00:19:49 字數 769 閱讀 3695

假設有一組相同類的物件,類未實現本地比較。現在想根據類的某個屬性進行排序。

常規的做法是用sorted方法的關鍵字引數key進行定製化比較,如下示例:

class user:

def __init__(self, user_id):

self.user_id = user_id

def __repr__(self):

return 'user({})'.format(self.user_id)

>>> users = [user(23), user(3), user(99)]

>>> users

[user(23), user(3), user(99)]

>>> sorted(users, key=lambda u: u.user_id)

[user(3), user(23), user(99)]

>>>

乙個替代方案是可以使用operator模組的attrgetter函式,如下:

>>> from operator import attrgetter

>>> sorted(users, key=attrgetter('user_id'))

[user(3), user(23), user(99)]

使用常規的lambda還是attrgetter依據個人偏好,但attrgetter在效能上更勝一籌,且增加了乙個屬性,可以同時支援多個類屬性域。。attrgetter類似上一博文itemgetter的用法。

排序沒有本地比較支援的物件

假設有一組相同類的物件,類未實現本地比較。現在想根據類的某個屬性進行排序。常規的做法是用sorted方法的關鍵字引數key進行定製化比較,如下示例 class user def init self,user id self.user id user id def repr self return u...

java中物件集合的比較與排序

現種方式。一是物件本身直接實現comparable介面 class student implements comparable 另一種是借助比較器物件,這個比較器物件針對指定的類來定義。並實現comparator介面 class student 最後借助conections.sort 或arrayl...

物件的比較與排序(一) 型別比較和值比較

一。型別比較 1.gettype 方法,所有的類都從system.object 中繼承了這個方法,這個方法和typeof 運算子一起使用,就可以確定物件的型別 if myobj.gettype typeof myclass myobj是物件名,myclass是乙個類名 2.is運算子 平時用得多,不...