如果 '2010-09-11' 是年-月-日,您可以:
somedata = 'jyhghg'
t = [('2010-09-11','somedata',somedata),
('2010-06-11','somedata',somedata),
('2010-09-12','somedata',somedata),
('2010-08-12','somedata',somedata)]
from operator import itemgetter
t.sort(key = itemgetter(0))
print t
结果
[('2010-06-11', 'somedata', 'jyhghg'),
('2010-08-12', 'somedata', 'jyhghg'),
('2010-09-11', 'somedata', 'jyhghg'),
('2010-09-12', 'somedata', 'jyhghg')]
.
如果 '2010-09-11' 是年-日-月,您可以:
from time import strptime,strftime
somedata = 'jyhghg'
t = [('2010-09-11','somedata',somedata),
('2010-06-11','somedata',somedata),
('2010-09-12','somedata',somedata),
('2010-08-12','somedata',somedata)]
t.sort(key = lambda x: strftime('%Y%m%d',strptime(x[0],'%Y-%d-%m')))
print t
结果
[('2010-06-11', 'somedata', 'jyhghg'),
('2010-09-11', 'somedata', 'jyhghg'),
('2010-08-12', 'somedata', 'jyhghg'),
('2010-09-12', 'somedata', 'jyhghg')]
.
编辑 1
阅读Artsiom Rudzenka 的答案,他单独使用 strptime(),我意识到 strptime() 会产生一个 struct_time 对象是按性质排序的。这样的对象具有属性tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst,可以通过常见的点表示法访问(例如toto.tm_mon),也可以通过索引表示法访问(toto[1] 例如),因为 struc_time 对象的属性是按此顺序注册的 tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst 。 struct_time 数据类型有一个命名元组的接口。
由于 struct_time 对象是按性质排序的,因此不必应用 strftime() 来获得具有此顺序的 year-month-day 的日期字符串:this struct_time 对象中已经存在顺序。
然后,我针对 11 in '2010-06-11' 是 month 的情况更正我的代码:我消除strftime()
from time import strptime
somedata = 'jyhghg'
t = [('2010-09-11','somedata',somedata),
('2010-06-11','somedata',somedata),
('2010-09-12','somedata',somedata),
('2010-08-12','somedata',somedata)]
t.sort(key = lambda x: strptime(x[0],'%Y-%d-%m'))
print t
编辑 2
考虑 Kirk Strauser 的信息:
import re
regx = re.compile('(\d{4})-(\d\d)-(\d\d)')
somedata = 'jyhghg'
t = [('2010-09-11','somedata',somedata),
('2010-06-11','somedata',somedata),
('2010-09-12','somedata',somedata),
('2010-08-12','somedata',somedata)]
t.sort(key = lambda x: regx.match(x[0]).group(1,3,2))
print t