あなたの月と日のすべてがゼロ詰めであり、あなたの日付が "01/01/2001"のようなm/d/Yフォーマットであれば、次のように書くことができます:
def datekey(d):
m, d, y = d.split('/')
return (y, m, d)
datelist.sort(key=datekey)
数値が常にゼロで埋められない場合は、比較のために各数値をintにキャストできます。
def datekey(d):
m, d, y = d.split('/')
return (int(y), int(m), int(d))
datelist.sort(key=datekey)
すべての日付が単純な形式である場合は、 strptime
を使用するよりも、これは way
>>> import timeit
>>> print timeit.Timer("datelist.sort(key=datekey)",
... setup="""\
... datelist = ['01/01/2001', '01/02/2001', '12/31/1999']
... def datekey(d):
... m, d, y = d.split('/')
... return (y, m, d)
... """).timeit()
3.3154168129
>>> print timeit.Timer("datelist.sort(key=datekey)",
... setup="""\
... datelist = ['01/01/2001', '01/02/2001', '12/31/1999']
... def datekey(d):
... m, d, y = d.split('/')
... return (int(y), int(m), int(d))
... """).timeit()
11.1701700687
>>> print timeit.Timer("datelist.sort(key = lambda s: datetime.datetime.strptime(s, '%m/%d/%Y'))",
... setup="""\
... datelist = ['01/01/2001', '01/02/2001', '12/31/1999']
... import datetime
... """).timeit()
59.2817358971
strptime
is hugely powerful, very important to know, and very slow in this use case.