web-dev-qa-db-fra.com

Trier les dictées par valeurs dans Python 3.6+

Je cherchais une méthode pour trier un dictionnaire en Python avec ses valeurs, après quelques tentatives, voici ce qui se passe:

a = {<populated dict...>}
a = {v: k for k, v in a.items()}
a = {v: k for k, v in sorted(a.items())}

Ce code semble fonctionner, mais je pense que les performances sont médiocres. Existe-t-il un meilleur moyen?

3
Giuseppe

Vous n'avez pas besoin de faire l'échange de clé/valeur double, vous pouvez le faire:

a = {k: v for k, v in sorted(a.items(), key=lambda x: x[1])}

( triés DOCS )

Code de test:

data = dict(a=1, b=3, c=2)
print(data)
data_sorted = {k: v for k, v in sorted(data.items(), key=lambda x: x[1])}
print(data_sorted)

Résultats:

À partir de CPython 3.6:

{'a': 1, 'b': 3, 'c': 2}
{'a': 1, 'c': 2, 'b': 3}
3
Stephen Rauch
from collections import OrderedDict

sinon, créez une liste de clés dans l'ordre de votre choix.

0
Schalton