2014-07-04 80 views
2

我有以下列表包含日期(但不格式化爲日期時間,僅字符串):日期時間轉換爲字符串和格式

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」?

非常感謝!

回答

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'] 
相關問題