Je veux trier un dictionnaire par ses valeurs (d'entiers) dans un dictionnaire. Comme suit:
[('e',5),('l':8),('h':10)]
Ce que je veux, c'est:
import operator sorted_li = sorted(di.items(),key=operator.itemgetter(1),reverse=True) print(sorted_li)
J'ai beaucoup cherché et j'ai pu le trier dans une liste de tuples, comme:
sorted_di = {'e':5, 'l':8, 'h':10}
Donne:
di = {'h': 10, 'e':5, 'l':8}
Mais je veux que ce soit à nouveau un dictionnaire.
Peut quelqu'un m'aide s'il vous plaît ??
3 Réponses :
Les dictionnaires sont-ils classés en Python 3.6+?
Il s'agit de l'ordre d'insertion . À partir de Python 3.6, pour le CPython implémentation de Python, les dictionnaires mémorisent l'ordre des éléments inséré. Ceci est considéré comme un détail d'implémentation dans Python 3.6; vous devez utiliser
OrderedDict
si vous voulez que l'ordre d'insertion soit garanti sur d'autres implémentations de Python (et d'autres comportement).i.e.
Pré-3.6:
>>> dict(sorted_li) {'e':5, 'l':8, 'h':10}3.6+:
>>> from collections import OrderedDict ... >>> OrderedDict(sorted_li) OrderedDict([('e', 5), ('l', 8), ('h', 10)])
Je crois qu'ils l'ont changé d'un détail d'implémentation à une garantie en Python 3.7.
@FightWithCode OrderedDict
est un dictionnaire, il ressemble à des tuples uniquement lorsque vous l'imprimez.
D'accord maintenant je comprend. Tout d'abord, triez le dict dans une liste de tuples. Et puis convertissez-le en dict by OrderedDict. Merci beaucoup
@FightWithCode vous devez inclure le code de tri dans le corps de la question; ma réponse visait à décrire la prochaine étape.
D'accord, comme tu veux.
di = {'h': 10, 'e':5, 'l':8} temp_list = [] for key,value in di.items(): temp_tuple = (k,v) temp_list.append(temp_tuple) temp_list.sort() for x,y in temp_list: dict_sorted = dict(temp_list) print(dict_sorted)
Les réponses au code uniquement sont déconseillées sur SO. Veuillez compléter le code que vous avez fourni comme réponse en expliquant pourquoi il résout le problème d'OP.
Vous pouvez essayer ceci:
di = {'h': 10, 'e':5, 'l':8} tuples = [(k, di[k]) for k in sorted(di, key=di.get, reverse=False)] sorted_di = {} for i in range(len(di)): k = tuples[i][0] v = tuples[i][1] sorted_di.update({k: v}) print(sorted_di) # {'e': 5, 'l': 8, 'h': 10}