我有一個存儲在datetime
對象中的生日列表。如何使用只有month
和day
參數的Python對它們進行排序呢?排除日期時間對象而忽略一年?
例如,
[
datetime.datetime(1983, 1, 1, 0, 0)
datetime.datetime(1996, 1, 13, 0 ,0)
datetime.datetime(1976, 2, 6, 0, 0)
...
]
謝謝! :)
我有一個存儲在datetime
對象中的生日列表。如何使用只有month
和day
參數的Python對它們進行排序呢?排除日期時間對象而忽略一年?
例如,
[
datetime.datetime(1983, 1, 1, 0, 0)
datetime.datetime(1996, 1, 13, 0 ,0)
datetime.datetime(1976, 2, 6, 0, 0)
...
]
謝謝! :)
您可以使用month
和day
來創建可用於排序的值:
birthdays.sort(key = lambda d: (d.month, d.day))
l.sort(key = lambda x: x.timetuple()[1:3])
如果日期存儲爲字符串,你說他們都沒有,雖然它看起來他們是,你可以使用dateutil的解析器:
>>> from dateutil.parser import parse
>>> from pprint import pprint
>>> bd = ['February 6, 1976','January 13, 1996','January 1, 1983']
>>> bd = [parse(i) for i in bd]
>>> pprint(bd)
[datetime.datetime(1976, 2, 6, 0, 0),
datetime.datetime(1996, 1, 13, 0, 0),
datetime.datetime(1983, 1, 1, 0, 0)]
>>> bd.sort(key = lambda d: (d.month, d.day)) # from sth's answer
>>> pprint(bd)
[datetime.datetime(1983, 1, 1, 0, 0),
datetime.datetime(1996, 1, 13, 0, 0),
datetime.datetime(1976, 2, 6, 0, 0)]
如果你的日期是在不同的格式,你可以給模糊解析一個鏡頭:
>>> bd = [parse(i,fuzzy=True) for i in bd] # replace line 4 above with this line
順便說一句:我假設該列表是爲了日期時間對象(如問題的第一部分中提到的),而不是字符串(如代碼段中所示)。 –
是的,對不起。我改變了這個例子來反映我的意思。 :) –