J'ai essayé de maintenir l'ordre d'un dictionnaire Python, car dict
en natif n'a aucun ordre. Beaucoup de réponses dans SE suggèrent d'utiliser OrderedDict
.
from collections import OrderedDict
domain1 = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" }
domain2 = OrderedDict({ "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" })
print domain1
print " "
for key,value in domain1.iteritems():
print (key,value)
print " "
print domain2
print ""
for key,value in domain2.iteritems():
print (key,value)
Après itération, j'ai besoin du dictionnaire pour conserver sa commande d'origine et imprimer la clé et les valeurs de la même manière:
{
"de": "Germany",
"sk": "Slovakia",
"hu": "Hungary",
"us": "United States",
"no": "Norway"
}
De toute façon, j'ai utilisé ne conserve pas cet ordre, cependant.
Vous devez lui passer un itératif ou insérer des éléments dans l'ordre - c'est ainsi qu'il connaît l'ordre. Essayez quelque chose comme ça:
from collections import OrderedDict
domain = OrderedDict([('de', 'Germany'),
('sk', 'Slovakia'),
('hu', 'Hungary'),
('us', 'United States'),
('no', 'Norway')])
Le tableau étant itératif, OrderedDict saura l'ordre que vous souhaitez.
Dans le cas OrderedDict
, vous créez un dictionnaire intermédiaire, régulier (et donc non ordonné) avant qu'il ne soit transmis au constructeur. Afin de conserver cet ordre, vous devrez soit passer quelque chose d'ordre au constructeur (par exemple une liste de n-uplets), soit ajouter les clés une par une dans l'ordre souhaité (éventuellement en boucle).
Réponse tardive, mais voici un dictionnaire python 3.6+
oneliner à sort
de key
sans utiliser imports:
d = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" }
d_sorted = {k: v for k, v in sorted(d.items(), key=lambda x: x[1])}
print(d_sorted)
Sortie:
{'de': 'Germany', 'hu': 'Hungary', 'no': 'Norway', 'sk': 'Slovakia', 'us': 'United States'}
Vous pouvez utiliser OrderedDict
mais vous devez prendre en compte que OrderedDict
ne fonctionnera pas en dehors de votre code en cours d'exécution.
Cela signifie que l'exportation de l'objet au format JSON perdra tous les effets de OrderedDict
.
Ce que vous pouvez faire est de créer un tableau de métadonnées dans lequel vous pouvez stocker les clés "de", sk", etc.
de manière ordonnée. En parcourant le tableau dans l'ordre, vous pouvez vous référer correctement au dictionnaire et l'ordre dans le tableau survivra à toute exportation au format JSON, YAML, etc.
JSON actuel:
{ "de": "Germany", "sk": "Slovakia", "hu": "Hungary", "us": "United States", "no": "Norway" }
Nouvel objet countries
:
countries = {
"names" : {
"de": "Germany", "sk": "Slovakia", "hu": "Hungary", "us": "United States", "no": "Norway"
},
"order" : [
"de", "sk", "hu", "us", "no"
]
}
Code qui imprimera les noms longs dans l'ordre:
for code in countries['order']:
print(countries['names'][code])