Se connecter

Informatique

Programmation

Sujet : [python] trier un dictionnaire ou une liste par date
1
kickme
Niveau 22
18 mars 2018 à 09:29:55

Bonjour,
j'ai un dictionnaire qui ressemble a ça :

dict = {'10/02': 'test', '20/02': 'test2', '09/02': 'test3'}

et j'aimerai pouvoir récupérer ce dict mais en ayant trier les keys (donc les dates), j'ai fait des recherches et test 2-3 trucs mais je n'ai pas réussi.

A savoir que je peux utiliser une list qui donnerait ça :

 liste = ['10/02 test', '20/02 test2', '09/02 test3']

Donc pareil j'aimerai trier les valeurs en utilisant seulement les dates (donc ignorer les test,test2 etc).
Bon pour le moment j'ai pu contourner le problème en mettant tout ça dans une table html et en triant ça depuis la mais j'aimerais pouvoir le faire directement dans mon code python.

Si vous avez une solution :) Merci.

Blaff11
Niveau 10
18 mars 2018 à 15:02:59

Salut. :ok:

Pour récupérer la liste des clés de ton dictionnaires :

dates = dct.keys()

Pour la trier:

sorted_dates = sorted(dates)

Pour récupérer les valeurs correspondantes :

tests = [dct[date] for date in sorted_dates]

Cette façon de construire une liste se nomme "par compréhension".

Tu devrais aussi éviter de nommer tes variables avec des noms de built-in (ça s'appelle du "shadowing", en l’occurrence du built-in dict).

Le tri peut poser problème avec les chaînes de caractères, vu que 20/02 arrivera après 10/03. Si tu peux, fais en sorte que le mois précède le jour. Sinon, tu peux utiliser :

from datetime import datetime
sorted_dates = sorted(dates, key=lambda d: datetime.strptime(d, "%d/%m"))

Bon courage. :-)))

kickme
Niveau 22
18 mars 2018 à 16:48:35

Merci Blaff11, ta solution a fonctionné comme je le voulais

Tu devrais aussi éviter de nommer tes variables avec des noms de built-in (ça s'appelle du "shadowing", en l’occurrence du built-in dict).

d'accord merci :)

1
Sujet : [python] trier un dictionnaire ou une liste par date
   Retour haut de page
Consulter la version web de cette page