2013-11-24 420 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:建议添加到答案(与适当的功劳)。 –