Wie kann ein geordnetes Wörterbuch (OD) richtig initialisiert werden, damit die Reihenfolge der Anfangsdaten beibehalten wird?
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])
Frage:
Wird
OrderedDict
die Reihenfolge einer Liste von Tupeln oder eines Tupels von Tupeln oder eines Tupels von Listen oder einer Liste von Listen usw. beibehalten, die zum Zeitpunkt der Initialisierung übergeben wurden (2. und 3. Beispiel oben)?Wie kann man überprüfen, ob
OrderedDict
tatsächlich eine Bestellung aufrechterhalten wird? Da adict
eine unvorhersehbare Reihenfolge hat, was ist, wenn meine Testvektoren glücklicherweise dieselbe Anfangsreihenfolge haben wie die unvorhersehbare Reihenfolge eines Diktats? Wennd = OrderedDict({'b':2, 'a':1})
ich zum Beispiel nicht schreibed = OrderedDict({'a':1, 'b':2})
, kann ich fälschlicherweise den Schluss ziehen, dass die Reihenfolge erhalten bleibt. In diesem Fall habe ich herausgefunden, dass adict
alphabetisch geordnet ist, aber das ist möglicherweise nicht immer der Fall. Was ist ein zuverlässiger Weg, um anhand eines Gegenbeispiels zu überprüfen, ob eine Datenstruktur die Ordnung beibehält oder nicht, ohne wiederholt Testvektoren zu versuchen, bis einer bricht?
PS Ich lasse dies hier nur als Referenz : "Der OrderedDict-Konstruktor und die update () -Methode akzeptieren beide Schlüsselwortargumente, aber ihre Reihenfolge geht verloren, weil Pythons Funktionsaufrufsemantik die Schlüsselwortargumente mit einem regulären ungeordneten Wörterbuch übergibt."
PPS: Hoffentlich behält OrderedDict in Zukunft auch die Reihenfolge der kwargs bei (Beispiel 1): http://bugs.python.org/issue16991