【问题标题】:Sort list of date strings排序日期字符串列表
【发布时间】:2013-07-13 06:13:16
【问题描述】:

我有一个任意日期字符串列表 (mm-yyyy),如下所示:

d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007'...]

我需要这个列表首先按年(升序)排序,然后按月(升序)排序..这样逻辑顺序可以是:

d_ordered = ['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013' ...]

我怎样才能做到这一点?

【问题讨论】:

  • 又快又脏:d.sort(key=lambda x: x.split('-')[::-1])

标签: python datetime


【解决方案1】:

试试这个:

import datetime
d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007']
sorted(d, key=lambda x: datetime.datetime.strptime(x, '%m-%Y'))

【讨论】:

  • 对降序使用 reverse=True sorted(d, key=lambda x: datetime.datetime.strptime(x, '%m-%Y'), reverse=True)
【解决方案2】:

sorted() 与键一起使用:

>>> d = ['09-2012', '04-2007', '11-2012', '05-2013', '12-2006', '05-2006', '08-2007']
>>> def sorting(L):
...     splitup = L.split('-')
...     return splitup[1], splitup[0]
... 
>>> sorted(d, key=sorting)
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']

这里最好使用函数而不是 lambda,以防止两次调用 split()(而且看起来更整洁:))

请注意,这将返回排序列表。如果要就地排序,请使用.sort()

>>> d.sort(key=sorting)
>>> d
['05-2006', '12-2006', '04-2007', '08-2007', '09-2012', '11-2012', '05-2013']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2020-10-01
    • 2015-04-14
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多