Tri dictionnaire par clés

Tri dictionnaire par clés - Python - Programmation

Marsh Posté le 06-04-2009 à 17:40:30    

Bonjour,
sous Python 2.5, j'ai un dictionnaire :
>>> dico_ref
{'r3': ['choco'], 'r1': ['fraise'], 'r2': ['vanille','choco']}
Je voudrais trier dico_ref par ordre alpha-numérique des clés (string), ie obtenir :
>>> {'r1': ['fraise'], 'r2': ['vanille','choco'], 'r3': ['choco']}
J'ai essayé :
>>> [(k,dico_ref[k]) for k in sorted(dico_ref.keys())]
mais ça me renvoie évidemment une liste de tuples, et je perds le format dictionnaire que je veux conserver.
Comment obtenir ce dictionnaire trié par clés ?
Merci.

Reply

Marsh Posté le 06-04-2009 à 17:40:30   

Reply

Marsh Posté le 06-04-2009 à 18:15:23    

gennosuke a écrit :

Comment obtenir ce dictionnaire trié par clés ?


Un dict python est un mapping, pas une séquence, ce n'est ni trié ni triable, et accessoirement l'ordre d'itération n'est pas stable.
 
Au mieux, tu peux récupérer une séquence triée de (clé, valeur):

Code :
  1. >>> d = {'r3': ['choco'], 'r1': ['fraise'], 'r2': ['vanille','choco']}
  2. >>> d
  3. {'r1': ['fraise'], 'r2': ['vanille', 'choco'], 'r3': ['choco']}
  4. >>> sorted(d.iteritems(), reverse=True)
  5. [('r3', ['choco']), ('r2', ['vanille', 'choco']), ('r1', ['fraise'])]


 
En third-party, il y a un sorteddict sur Pypy issu d'une proposition de PEP abandonnée, un autre dans Django, et quelques implés d'ordereddict. Mais bon c'est rarement vraiment utile.


Message édité par masklinn le 06-04-2009 à 18:21:31

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 06-04-2009 à 18:38:25    

OK, merci.
Ca s'arrange, j'ai fait appel à sorted(dico_ref) au lieu de dico_ref.keys() par la suite pour appeler les listes de dico_ref dans l'ordre des clés triées.
A +

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed