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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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