2 votes

Ordonner le dictionnaire par clé avec représentation numérique

J'ai cette entrée, où chaque valeur a une plage de 200 :

d = {'600-800': 3, '1800-2000': 3, '1000-1200': 5, '400-600': 1, '2600-2800': 1}

Et je suis à la recherche de cet ordre attendu :

{'400-600': 1, '600-800': 3, '1000-1200': 5, '1800-2000': 3, '2600-2800': 1}

J'ai déjà essayé quelque chose comme ça, mais l'ordre est juste mauvais :

import collections
od = collections.OrderedDict(sorted(d.items()))
print od

4voto

Patrick Artner Points 29630

Vous pouvez diviser la clé en plusieurs parties à '-' et utiliser la première partie comme valeur entière pour le trier. La deuxième partie n'est pas pertinente pour le triage en raison de la nature de vos valeurs clés (lorsqu'elles sont converties en nombres entiers) :

d = {'600-800': 3, '1800-2000': 3, '1000-1200': 5, '400-600': 1, '2600-2800': 1}
import collections
od = collections.OrderedDict(sorted(d.items(),key =lambda x: int(x[0].split("-")[0])))
print od

Sortie :

OrderedDict([('400-600', 1), ('600-800', 3), ('1000-1200', 5), 
             ('1800-2000', 3), ('2600-2800', 1)])

Doku :

En rapport :

2voto

Graipher Points 3733

Si vous voulez ordonner votre dictionnaire par la première année d'abord (et ensuite par la deuxième année si nécessaire, ce qui n'est pas nécessaire dans l'exemple donné, mais semble plus naturel), vous devez convertir en nombres entiers et définir une clé personnalisée :

d = {'600-800': 3, '1800-2000': 3, '1000-1200': 5, '400-600': 1, '2600-2800': 1}

sorted(d.items(), key=lambda t: tuple(map(int, t[0].split("-"))))
# [('400-600', 1),
#  ('600-800', 3),
#  ('1000-1200', 5),
#  ('1800-2000', 3),
#  ('2600-2800', 1)]

La conversion en nombres entiers est nécessaire parce que, par exemple, les données suivantes ont été converties en nombres entiers "1000" < "200" mais 1000 > 200 . Cette liste peut être transmise à OrderedDict après comme dans votre code, si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X