2013-11-24 441 views
-1

我有一個列表,我希望排序的Python中的日期時間對象,星期一在列表的開始,星期日在最後。完成這個的最好方法是什麼?在Python中按日期排序日期列表

很多謝謝

+5

向我們展示您的代碼! – jazzpi

+1

還定義'最佳':性能,代碼簡單性或什麼。 –

回答

1

這就是你想要的嗎?

>>> import datetime 
>>> now = datetime.date.today() 
>>> now.isoweekday() 
7 
>>> days = [now + datetime.timedelta(days=x) for x in range(30)] 
>>> days 
[datetime.date(2013, 11, 24), datetime.date(2013, 11, 25), datetime.date(2013, 11, 26), datetime.date(2013, 11, 27), datetime.date(2013, 11, 28), datetime.date(2013, 11, 29), datetime.date(2013, 11, 30), datetime.date(2013, 12, 1), datetime.date(2013, 12, 2), datetime.date(2013, 12, 3), datetime.date(2013, 12, 4), datetime.date(2013, 12, 5), datetime.date(2013, 12, 6), datetime.date(2013, 12, 7), datetime.date(2013, 12, 8), datetime.date(2013, 12, 9), datetime.date(2013, 12, 10), datetime.date(2013, 12, 11), datetime.date(2013, 12, 12), datetime.date(2013, 12, 13), datetime.date(2013, 12, 14), datetime.date(2013, 12, 15), datetime.date(2013, 12, 16), datetime.date(2013, 12, 17), datetime.date(2013, 12, 18), datetime.date(2013, 12, 19), datetime.date(2013, 12, 20), datetime.date(2013, 12, 21), datetime.date(2013, 12, 22), datetime.date(2013, 12, 23)] 
>>> sorted_days = sorted(days, key=datetime.date.isoweekday) 
>>> print "\n".join(["%s : %s" % (d.isoweekday(), d) for d in sorted_days]) 
1 : 2013-11-25 
1 : 2013-12-02 
1 : 2013-12-09 
1 : 2013-12-16 
1 : 2013-12-23 
2 : 2013-11-26 
2 : 2013-12-03 
2 : 2013-12-10 
2 : 2013-12-17 
3 : 2013-11-27 
3 : 2013-12-04 
3 : 2013-12-11 
3 : 2013-12-18 
4 : 2013-11-28 
4 : 2013-12-05 
4 : 2013-12-12 
4 : 2013-12-19 
5 : 2013-11-29 
5 : 2013-12-06 
5 : 2013-12-13 
5 : 2013-12-20 
6 : 2013-11-30 
6 : 2013-12-07 
6 : 2013-12-14 
6 : 2013-12-21 
7 : 2013-11-24 
7 : 2013-12-01 
7 : 2013-12-08 
7 : 2013-12-15 
7 : 2013-12-22 
>>> 

編輯:我的日期已經排序,但可能不是你的情況。如果沒有,你想有一個內部排序日期的同一工作日集團,帝斯曼的建議(感謝DSM)是RighThing(TM):

>>> sorted_days = sorted(days, key=lambda d: (d.isoweekday(), d)) 

這將排序首先由平日然後按日期。

+0

@DSM:好點 - 在我的情況下,日期已經排序,但OP可能不是這種情況。 –

+0

@DSM:建議添加到答案(與適當的功勞)。 –