Jaki jest prawidłowy sposób zainicjowania uporządkowanego słownika (OD), aby zachował kolejność danych początkowych?
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])
Pytanie:
Czy
OrderedDictzachowa kolejność listy krotek, krotek krotek lub krotek list lub list list itp. Przekazanych w czasie inicjalizacji (przykład 2 i 3 powyżej)?Jak sprawdzić, czy
OrderedDictfaktycznie utrzymuje zamówienie? Ponieważdictkolejność a ma nieprzewidywalną kolejność, co się stanie, jeśli moje wektory testowe na szczęście mają tę samą początkową kolejność, co nieprzewidywalna kolejność dyktu? Na przykład, jeśli zamiastd = OrderedDict({'b':2, 'a':1})pisaćd = OrderedDict({'a':1, 'b':2}), mogę błędnie stwierdzić, że porządek jest zachowany. W tym przypadku dowiedziałem się, że adictjest uporządkowane alfabetycznie, ale nie zawsze może to być prawda. Jaki jest niezawodny sposób wykorzystania kontrprzykładu do sprawdzenia, czy struktura danych zachowuje porządek, czy nie, oprócz wielokrotnego wypróbowywania wektorów testowych, aż jeden się zepsuje?
PS Zostawię to tutaj jako odniesienie : "Konstruktor OrderedDict i metoda update () akceptują argumenty słów kluczowych, ale ich kolejność jest tracona, ponieważ semantyka wywołań funkcji Pythona argumenty słów kluczowych pass-in przy użyciu zwykłego słownika nieuporządkowanego"
PPS: Miejmy nadzieję, że w przyszłości OrderedDict również zachowa kolejność kwargów (przykład 1): http://bugs.python.org/issue16991