Qual è il modo corretto per inizializzare un dizionario ordinato (OD) in modo che mantenga l'ordine dei dati iniziali?
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])
Domanda:
Sarà un
OrderedDict
preservare l'ordine di una lista di tuple o tuple di tuple o tuple di liste o lista di liste, ecc passato al momento della inizializzazione (2 ° e 3 ° esempio di cui sopra)?Come si verifica se
OrderedDict
effettivamente mantiene un ordine? Dato che adict
ha un ordine imprevedibile, cosa succede se i miei vettori di test hanno fortunatamente lo stesso ordine iniziale dell'ordine imprevedibile di un dict? Ad esempio, se invece did = OrderedDict({'b':2, 'a':1})
scrivered = OrderedDict({'a':1, 'b':2})
, posso erroneamente concludere che l'ordine è conservato. In questo caso, ho scoperto che adict
è ordinato alfabeticamente, ma potrebbe non essere sempre vero. Qual è un modo affidabile per utilizzare un controesempio per verificare se una struttura dati conserva l'ordine o meno, a meno di provare ripetutamente i vettori di prova fino a quando non si rompe?
PS Lo lascio qui solo come riferimento : "Il costruttore OrderedDict e il metodo update () accettano entrambi gli argomenti delle parole chiave, ma il loro ordine è perso perché la semantica della chiamata di funzione di Python passa gli argomenti delle parole chiave usando un normale dizionario non ordinato"
PPS: Si spera che in futuro OrderedDict conserverà anche l'ordine di kwargs (esempio 1): http://bugs.python.org/issue16991