2012-06-20 61 views
2

我對python編程非常陌生,至今尚未購買關於此問題的教科書(我今天從商店或Amazon購買)。同時,你能幫我解決我遇到的以下問題嗎?字典對象列表的數字排序

我有這樣的字典對象的列表:

stock = [ 
    { 'date': '2012', 'amount': '1.45', 'type': 'one'}, 
    { 'date': '2012', 'amount': '1.4', 'type': 'two'}, 
    { 'date': '2011', 'amount': '1.35', 'type': 'three'}, 
    { 'date': '2012', 'amount': '1.35', 'type': 'four'} 
] 

我想通過量日期列由量列對列表進行排序,然後使排序列表如下:

stock = [ 
    { 'date': '2011', 'amount': '1.35', 'type': 'three'}, 
    { 'date': '2012', 'amount': '1.35', 'type': 'four'}, 
    { 'date': '2012', 'amount': '1.4', 'type': 'two'}, 
    { 'date': '2012', 'amount': '1.45', 'type': 'one'} 
] 

我現在覺得我需要使用sorted(),但作爲初學者,我很難理解我所看到的概念。

我嘗試這樣做:

from operator import itemgetter 
all_amounts = itemgetter("amount") 
stock.sort(key = all_amounts) 

,但是這導致在了排序的字母數字,而不是數字的名單。

有人可以告訴我如何實現這個看似簡單的排序嗎?謝謝!

+1

你爲什麼不把你的字典中的數據轉換成數字?這似乎是一個更好的代表。 – BrenBarn

+0

你的'股票'是無效的Python。請修復它 –

回答

3

對於operator.itemgetter,您的分揀條件太複雜。你將不得不使用lambda功能:

stock.sort(key=lambda x: (int(x['date']), float(x['amount']))) 

all_amounts = lambda x: (int(x['date']), float(x['amount'])) 
stock.sort(key=all_amounts) 
+0

哇!這非常快,正是我所需要的。謝謝你eumiro,我會花一個小時試着弄清楚它的含義:-) – user1464409

+0

只需嘗試'all_amounts [stock [0]]'看看它是如何構建一個元組進行排序的。 – eumiro

0

你也可以使用一個事實,即蟒蛇的排序是stable

stock.sort(key=lambda x: int(x["amount"])) 
stock.sort(key=lambda x: int(x["date"])) 

由於使用相同的密鑰項目在排序時保持它們的相對位置(它們從不交換),您可以通過多次排序構建複雜的排序。