2013-10-21 61 views

回答

8

使用operator.attrgetter.sort

from operator import attrgetter 
your_list.sort(key=attrgetter('age'), reverse=True) 
+1

只是爲了OP的好處:這是一個** inplace排序**,所以不要指望'your_list = your_list.sort(key = attrgetter('age'),reverse = True)'工作。爲此,請使用iCodez中的'sorted'回答。 –

+0

@BurhanKhalid在效率方面存在差異,如果名單應該變得更大? – BSG

+0

我還會補充一點,'operator.attrgetter'會比iCodez提出的'lambda'更有效率......儘管小列表的效率好處不明顯 –

5

由於您的列表很小,沒有必要進口operator.attrgetter。使用sorted具有lambda功能將運行一樣好:

sorted(lst, key=lambda x: x.age, reverse=True) 

在上面的代碼,lst是列表。我更改了名稱,因爲這樣做是不好的做法,因爲這樣做會掩蓋內置變量,因此命名爲變量list

此外,此解決方案不是就地。意思是,你可以將它分配給一個變量:

new_lst = sorted(lst, key=lambda x: x.age, reverse=True) 
+0

'x'是使用中的模型? – BSG

+0

@BSG - 的確如此。 'x'將被傳遞給'lambda',即對象。 – iCodez

+3

**降** *咳嗽* –

相關問題