Trier les listes de dates par jour en Python

J'ai une liste d'objets datetime en Python que je souhaite trier, les lundis étant au début de la liste et les dimanches étant à la fin. Quelle est la meilleure façon d'accomplir cela?

Merci beaucoup

0
Montrez-nous votre code!
ajouté l'auteur jazzpi, source
Définissez également best : performances, simplicité du code ou quoi.
ajouté l'auteur Aleksander Lidtke, source

1 Réponses

Est-ce que c'est ce que tu veux ?

>>> import datetime
>>> now = datetime.date.today()
>>> now.isoweekday()
7
>>> days = [now + datetime.timedelta(days=x) for x in range(30)]
>>> days
[datetime.date(2013, 11, 24), datetime.date(2013, 11, 25), datetime.date(2013, 11, 26), datetime.date(2013, 11, 27), datetime.date(2013, 11, 28), datetime.date(2013, 11, 29), datetime.date(2013, 11, 30), datetime.date(2013, 12, 1), datetime.date(2013, 12, 2), datetime.date(2013, 12, 3), datetime.date(2013, 12, 4), datetime.date(2013, 12, 5), datetime.date(2013, 12, 6), datetime.date(2013, 12, 7), datetime.date(2013, 12, 8), datetime.date(2013, 12, 9), datetime.date(2013, 12, 10), datetime.date(2013, 12, 11), datetime.date(2013, 12, 12), datetime.date(2013, 12, 13), datetime.date(2013, 12, 14), datetime.date(2013, 12, 15), datetime.date(2013, 12, 16), datetime.date(2013, 12, 17), datetime.date(2013, 12, 18), datetime.date(2013, 12, 19), datetime.date(2013, 12, 20), datetime.date(2013, 12, 21), datetime.date(2013, 12, 22), datetime.date(2013, 12, 23)]
>>> sorted_days = sorted(days, key=datetime.date.isoweekday)
>>> print "\n".join(["%s : %s" % (d.isoweekday(), d) for d in sorted_days])
1 : 2013-11-25
1 : 2013-12-02
1 : 2013-12-09
1 : 2013-12-16
1 : 2013-12-23
2 : 2013-11-26
2 : 2013-12-03
2 : 2013-12-10
2 : 2013-12-17
3 : 2013-11-27
3 : 2013-12-04
3 : 2013-12-11
3 : 2013-12-18
4 : 2013-11-28
4 : 2013-12-05
4 : 2013-12-12
4 : 2013-12-19
5 : 2013-11-29
5 : 2013-12-06
5 : 2013-12-13
5 : 2013-12-20
6 : 2013-11-30
6 : 2013-12-07
6 : 2013-12-14
6 : 2013-12-21
7 : 2013-11-24
7 : 2013-12-01
7 : 2013-12-08
7 : 2013-12-15
7 : 2013-12-22
>>> 

EDIT: mes dates étaient déjà triées, mais ce n'est peut-être pas le cas pour vous. Si ce n'est pas le cas et que vous souhaitez que les dates soient triées dans un même groupe de jours de semaine, la suggestion de DSM (merci DSM) est le RighThing (tm):

>>> sorted_days = sorted(days, key=lambda d: (d.isoweekday(), d))

Cela va trier d'abord par semaine puis par date.

0
ajouté
@DSM: bon point - dans mon cas les dates étaient déjà triées mais cela pourrait ne pas être le cas pour l'OP.
ajouté l'auteur bruno desthuilliers, source
@DSM: suggestion ajoutée à la réponse (avec un crédit approprié).
ajouté l'auteur bruno desthuilliers, source