2010-04-07 16 views

回答

23
.sort(key=lambda x: datetime.datetime.strptime(x['date'], '%Y-%m-%d')) 
+1

這看起來很酷,但我得到當我嘗試時,「無」作爲答案! – 2010-04-07 01:43:07

+7

大多數'list'方法在原地工作,而不是返回列表。 – 2010-04-07 01:44:03

+2

我喜歡這個答案的靈活性。就我而言,我不得不求助於'%m /%d /%Y'。 – Wok 2014-03-11 14:42:04

2
records = [ 
    {'date': '2010-04-01', 'people': 1047, 'hits': 4522}, 
    {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
    {'date': '2010-04-02', 'people': 736, 'hits': 3277} 
    ] 
records.sort(key=lambda x: x['date'].split('-')) 
+0

請注意,如果日期未填滿,此類排序不起作用。因爲,例子2-1會在10-1之後出現,即使2月在10月之前。 – 2012-07-27 23:06:50

19

幸運的是,ISO格式的日期,這似乎是你有什麼在這裏,整理得很好爲字符串!所以你不需要任何花哨:

import operator 
yourlistofdicts.sort(key=operator.itemgetter('date')) 
+0

'運營商'來拯救! – jathanism 2010-04-07 01:45:35

+2

順便說一句,我完全希望這個工作,但它不適合我w/Py2.6.2和OP的輸入列表。它返回'TypeError:itemgetter預期1個參數,得到2'。如果我使用'sorted'運行它,它會起作用:'sorted(yourlistofdicts,key = operator.itemgetter('date'))'。思考? – jathanism 2010-04-07 02:34:26

+2

糟糕,錯字:我錯過了'key =',編輯修復,謝謝。 – 2010-04-07 02:36:20

3

在python 2.6中,你可以使用soerted w/operator.itemgetter。 由於日期是YYYY-MM-DD是排序,即使它的字符串導致其最大到最小 - 我使用該格式的所有時間爲此

>>> import operator 
>>> l = [{'date': '2010-04-01','people': 1047, 'hits': 4522}, 
     {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
     {'date': '2010-04-02', 'people': 736, 'hits': 3277}] 
>>> sorted(l, key = operator.itemgetter('date')) 
[{'date': '2010-04-01', 'hits': 4522, 'people': 1047}, {'date': '2010-04-02', 'hits': 3277, 'people': 736}, {'date': '2010-04-03', 'hits': 2582, 'people': 617}] 
11

Satoru.Logic的解決方案是乾淨和簡單。但是,每Alex的帖子,你不需要操作日期字符串,以獲得排序順序正確......所以失去了.split('-')

這段代碼就足夠了:

records.sort(key=lambda x:x['date']) 
+1

......再次,當提問者太倉促*嘆息*時,最簡單,最極端的,最正確的答案就匆匆地擱在一邊。 – 2010-04-07 02:41:54

+0

Upvoted爲了簡單起見,但絕對需要日期爲YYYY-MM-DD格式(因此排序方式與字符串類似)。 – dkamins 2010-04-07 07:23:34

相關問題