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
OrderedDict
zachowa 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
OrderedDict
faktycznie utrzymuje zamówienie? Ponieważdict
kolejność 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 adict
jest 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