2015-04-16 28 views
1

我有以下類(下調):我可以用2個鍵排列對象列表嗎?

class DiskInstance(object): 

    def __init__(self, name, epoch, size) 
     self.name = name 
     self.epoch = epoch 
     self.size = size 

然後我定義一個外部函數(外部上述類):

def getepoch(object): 
    return object.epoch 

我然後實例化這個類的若干目的和附加到名爲DISKIMAGES的列表。

我目前的排序是這樣的:

for image in sorted(DISKIMAGES, key=getedate, reverse=True): 

有沒有什麼辦法可以排序首先由getedate,然後按尺寸?

Thx尋求幫助。

+0

無關,但有在'def __init __(...)'末尾缺少':',這會導致語法錯誤。 –

回答

6

如果您想通過劃時代然後大小進行排序,這應該工作:

sorted(DISKIMAGES, key=lambda x: (x.epoch, x.size), reverse=True) 

或由@chepner指出的那樣,你可以使用operator.attrgetter方法

import operator 
sorted(DISKIMAGES, key=operator.attrgetter('epoch', 'size'), reverse=True) 
+3

您也可以使用'operator.attrgetter('epoch','size')'代替'lambda'表達式。 – chepner

+0

這裏的要點是,當你對'tuples'列表進行排序時,排序對每個元組中的每個後續項遞歸 - 很像按字母順序排序的單詞 - 'aardvark'在'abacus'之前 - 就像'(' a','a','r','d',...)'會在'('a','b','a','c',...)'之前出現。 – will

相關問題