Votre problème est que vous construisez un dict
pour donner les données initiales à la OrderedDict
- ce dict
n'a pas stocker tout ordre, donc l'ordre est perdu avant qu'il n'arrive à la OrderedDict
.
La solution consiste à construire à partir d'un type de données ordonné - le plus simple étant un list
de tuple
s :
>>> from collections import OrderedDict
>>> od = OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])
>>> od
OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])
Il est intéressant de noter que c'est pourquoi OrderedDict
utilise la syntaxe qu'il utilise pour sa représentation de chaîne de caractères - les représentations de chaînes de caractères devraient essayer d'être du code Python valide pour reproduire l'objet lorsque cela est possible, et c'est pourquoi la sortie utilise une liste de tuples au lieu d'un dict.
Edita: À partir de Python 3.6, kwargs
est ordonné Vous pouvez donc utiliser des arguments sous forme de mots-clés à la place, à condition que vous disposiez d'une version de Python à jour.
A partir de 3.7 c'est également le cas pour dict
(c'était le cas pour CPython en 3.6, mais les spécifications du langage ne le spécifiaient pas, donc l'utilisation de OrderedDict
était encore nécessaire pour la compatibilité). Cela signifie que si vous pouvez supposer un environnement 3.7+, vous pouvez souvent laisser tomber OrderedDict
ou en construire un à partir d'un modèle régulier de dict
si vous avez besoin d'une fonction spécifique (par exemple, l'ordre d'importance pour l'égalité).