天天看點

Python輕松入門-37 自定義對象排序

視訊教程下載下傳連結:​​http://pan.baidu.com/s/1c1YHrdI​​​

配套教程下載下傳:​​​http://pan.baidu.com/s/1qYdI6q4​​

這節課,我們來講解自定義對象排序,假如現在你正在開發一個社交網絡應用,有很多使用者在使用,他們都有姓,名,生日,使用者ID,最喜歡的顔色,等等各種屬性,現在要你編寫一個算法,通過對象的各個屬性來對這個自定義對象進行排列,比如說,對使用者ID排序,那麼應該怎麼實作呢?在這裡,還是需要從operator子產品中引入attrgetter類,

from operator import attrgetter      

接着我們來模拟建立一個使用者類,然後定義它的init函數,這裡有2個屬性,使用者名和使用者id:

class User:
def __init__(self, name, id):self.name = nameself.id = id      

然後,我們再定義一個repr函數,這個函數的功能是當需要顯示一個對象在螢幕上時,将這個對象的屬性或者是方法整理成一個可以列印輸出的格式。這裡我們定義一個這樣的輸出格式,把使用者名和id通過冒号連接配接起來:

def __repr__(self):
return self.name + ":" + str(self.id)      

大家可能對這個函數沒有直覺的了解,是以,我們建立一個使用者的清單,然後通過循環将所有的User對象列印出來:

users = [
User('huang', 43),User('Bang', 5),User('www', 6),User('oxox', 8),User('work', 23),]for u in users:print(u)      

運作:

圖 6‑16

你看,它會按照repr函數定義的格式将每個User對象列印出來。

但是,列印出來的順序是按照我們定義的順序列印的,這裡我想對這個對象清單按照指定的方式排序,是以就來到本節課的主題了:對自定義對象進行排序,假如現在我們來對清單對象的name屬性排序:

for user in sorted(users, key=attrgetter("name")):
print(user)      

你看,成功的對name屬性進行了排序:

圖 6‑17

再來對id排序試試:

for user in sorted(users, key=attrgetter("id")):
print(user)      

運作:

圖 6‑18

你看,成功的對id進行了排序。

更多精彩内容盡在視訊中!