2010-01-11 6 views

Antwort

13

Sie month und day verwenden können, um einen Wert zu schaffen, die für die Sortierung verwendet werden können:

birthdays.sort(key = lambda d: (d.month, d.day)) 
7
l.sort(key = lambda x: x.timetuple()[1:3]) 
+0

BTW: Ich nehme an, dass diese Liste datetime Objekte (wie im ersten Teil der Frage erwähnt) gemeint ist, und keine Zeichenfolgen (wie im Code-Snippet gezeigt). –

+0

Ja, tut mir leid. Ich habe das Beispiel geändert, um zu zeigen, was ich vorhatte. :) –

3

Wenn die Daten als gespeicherten Strings-Sie sagen, sie sind nicht, obwohl es sieht aus wie sie sind: Sie Parser s‘dateutil verwenden könnte:

>>> 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)] 

Wenn Sie Ihre Reisedaten in verschiedenen Formaten sind, können Sie einen Schuss Fuzzy geben Parsen:

>>> bd = [parse(i,fuzzy=True) for i in bd] # replace line 4 above with this line 
Verwandte Themen