Quelle est la bonne façon d'initialiser un dictionnaire ordonné (OD) afin qu'il conserve l'ordre des données initiales?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
Question:
Est-ce qu'une
OrderedDict
conservation de l'ordre d'une liste de tuples, ou d'un tuple de tuples ou d'un tuple de listes ou d'une liste de listes etc. passée au moment de l'initialisation (2ème et 3ème exemple ci-dessus)?Comment vérifier si
OrderedDict
une commande est effectivement maintenue? Puisque adict
a un ordre imprévisible, que se passe-t-il si mes vecteurs de test ont heureusement le même ordre initial que l'ordre imprévisible d'un dict? Par exemple, si au lieu d'd = OrderedDict({'b':2, 'a':1})
écrired = OrderedDict({'a':1, 'b':2})
, je peux conclure à tort que l'ordre est conservé. Dans ce cas, j'ai découvert que adict
est classé par ordre alphabétique, mais ce n'est peut-être pas toujours vrai. Quel est un moyen fiable d'utiliser un contre-exemple pour vérifier si une structure de données préserve l'ordre ou non, à moins d'essayer des vecteurs de test à plusieurs reprises jusqu'à ce que l'on casse?
PS Je vais juste laisser ceci ici pour référence : "Le constructeur OrderedDict et la méthode update () acceptent tous les deux des arguments de mots-clés, mais leur ordre est perdu car la fonction de Python appelle les arguments de mots-clés de la sémantique à l'aide d'un dictionnaire non ordonné régulier."
PPS: J'espère qu'à l'avenir, OrderedDict conservera également l'ordre des kwargs (exemple 1): http://bugs.python.org/issue16991