下邊是一個例子,對Departs列表中的元素(均為Department類型)按照'id','name'兩個屬性排序(優先級依次減弱)
import operator # 導入operator 包,pip install operator Departs = [] # 待排序列表 class Department: # 自定義的元素 def __init__(self, id, name, id2): self.id = id self.name = name self.id2 = id2 # 創建元素和加入列表 Departs.append(Department(1, 'cbc', '1')) Departs.append(Department(2, 'acd', '4')) Departs.append(Department(3, 'bcd', '1')) Departs.append(Department(1, 'bcd', '1')) Departs.append(Department(2, 'acd', '3')) # 划重點#划重點#划重點----排序操作 cmpfun = operator.attrgetter('id2') # 參數為排序依據的屬性,可以有多個,這里優先id,使用時按需求改換參數即可 Departs.sort(key=cmpfun) # 使用時改變列表名即可 # 划重點#划重點#划重點----排序操作 # 此時Departs已經變成排好序的狀態了,排序按照id優先,其次是name,遍歷輸出查看結果 for depart in Departs: print(str(depart.id) + depart.name + depart.id2)
解釋都在注釋中,輸出結果為:
可以看到
1.列表已經改變;
2.id和name都相同的兩個部門的先后順序未改變,說明該排序算法具有穩定性
一般性方法:
1. 首先導入operator包,pip install operator
2.關鍵操作為定義cmpfun 和使用.sort,即:
cmpfun = operator.attrgetter('a','b') #這里是希望按照a,b兩個屬性排序,且優先按照a屬性,使用時更換參數即可。
list.sort(key=cmpfun)#list為待排序列表