1. 程式人生 > 其它 >python 對列表裡面的物件,類元素排序

python 對列表裡面的物件,類元素排序

下邊是一個例子,對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為待排序列表