2012-09-27 2 views
2

J'ai besoin de trier un dict, où les clés sont des fractions représentées par des chaînes et doivent être triés par ses valeurs numériques:Comment trier dict par valeur, quand les clés sont des fractions représentées par des chaînes?

-à-dire:

exp_time = {"2":10, "1/2":5:, "2.5":11, "1/200":9, "15":3, "1/30":6} 

résultat devrait être comme celui-ci (par ordre décroissant):

15 
2.5 
2 
1/2 
1/30 
1/200 
+0

'dict' de ne peuvent pas se trier, bien qu'une liste de leurs clés peuvent. – martineau

+0

Vous pourriez également être intéressé par les réponses à la question [dict-ordonnée en python] (http://stackoverflow.com/q/1319763/355230). – martineau

Répondre

12
>>> import fractions 
>>> exp_time = {"2":10, "1/2":5, "2.5":11, "1/200":9, "15":3, "1/30":6} 
>>> sorted(exp_time, key=fractions.Fraction, reverse=True) 
['15', '2.5', '2', '1/2', '1/30', '1/200'] 
+2

Bibliothèque standard Python FTW. – orlp

+2

+1, je ne connaissais pas le module 'fractions'. J'étais sur le point de poster la même réponse, mais avec une implémentation à la main de 'fractions.Fraction'. –

+1

Il convient de mentionner cependant qu'un dictionnaire standard est ** non ordonné **. Si tout le PO se soucie de cette liste finale, c'est bien, sinon on devrait utiliser une dictée ordonnée comme 'collections.OrderedDict' (Python 2.7+). –

Questions connexes