2010-11-25 3 views
2

J'ai un dictionnaire commeComment commander un dictionnaire basé sur la valeur

tel = {'jack': 18, 'sape': 4139, 'sar': 2139, 'mape': 319, 'sipe': 29} 

Je veux commander en fonction de la valeur dans l'ordre décroissant comme

tel = {'sape': 4139, 'sar': 2139, 'mape': 319, 'sipe': 29 'jack': 18} 

Je googlé beaucoup et trouvé résultats sans rapport. Y at-il une fonction intégrée là-bas ou d'une autre manière. aidez s'il vous plaît. Toute aide sera appréciée

Répondre

3

Il est impossible de commander un dict. Utilisez un dictionnaire ordonné ou une autre séquence ordonnée.

sorted(tel.iteritems(), key=operator.itemgetter(1), reverse=True) 
1
import operator 
sorted(my_dict.iteritems(), key=operator.itemgetter(1)) 

et qui peut être usefull.

3

en Python 2.7 ou 3.1, vous pouvez utiliser OrderedDict:

from collections import OrderedDict 
from operator import itemgetter 
tel = {'jack': 18, 'sape': 4139, 'sar': 2139, 'mape': 319, 'sipe': 29} 
newtel = OrderedDict(sorted(tel.items(), key=itemgetter(1), reverse=True)) 

Plus exemples peuvent être trouvés dans le What's New doc.

EDIT: Utilisez maintenant itemgetter au lieu de lambda pour plaire à ceux qui s'en soucient. Mes excuses à ceux qui l'ont trouvé plus clair à l'ancienne.

+1

Il est plus pythonique d'utiliser 'operator.itemgetter' plutôt qu'un lambda pour la clé de tri. – fmark

Questions connexes