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為待排序列表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM