我有以下列表包含日期(但没有格式化为日期时间,只有字符串):
MyList = ['25/4/2014', '2/12/2014', '15/7/2014']
我想从最早的日期到最晚的日期对此列表进行排序。 我把以下代码放在一起:
MyList = ['25/4/2014', '2/12/2014', '15/7/2014']
MyList2 = []
for i in MyList:
MyList2.append(datetime.strptime(i, "%d/%m/%Y"))
SortedList = sorted(MyList2)
Result = []
for n in SortedList:
m = n.strftime('%d/%m/%Y')
Result.append(m)
print Result
列表已排序,但问题是格式略有不同: ['25 / 04/2014','15/07 / 2014','02/12 / 2014']
注意日期和月份中的额外“0”。
有没有办法让结果列表具有原始格式,例如4月份将是“4”而不是“04”?
非常感谢!
答案 0 :(得分:4)
key
使用sorted()
功能;这将解析日期仅用于排序,保持原始值不变:
SortedList = sorted(MyList, key=lambda d: datetime.strptime(d, "%d/%m/%Y"))
然后,列表将根据key
函数的返回值而不是值本身进行排序。在内部,Python 修饰值(生成(key(v), None, v)
的元组,None
确保v
不参与破坏关系),对这些进行排序,然后取消再次装饰。
演示:
>>> from datetime import datetime
>>> MyList = ['25/4/2014', '2/12/2014', '15/7/2014']
>>> sorted(MyList, key=lambda d: datetime.strptime(d, "%d/%m/%Y"))
['25/4/2014', '15/7/2014', '2/12/2014']