Tutti gli esempi che ho trovato (in the documentation, ecc.) Definiscono OrderedDicts passando i dati al costruttore. Dalla documentazione:È possibile inizializzare un OrderedDict vuoto in Python con un meccanismo di ordinamento predefinito?
# regular unsorted dictionary
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
D'altro canto, è possibile inizializzare un OrderedDict fornendo parametri al costruttore, che la porta a preservare l'ordine in cui chiave, vengono aggiunti coppie di valori.
Sto cercando un tipo di costrutto che assomiglia a quanto segue, tranne senza "d.items()". In sostanza, sto chiedendo di ricordare un meccanismo senza fornirgli un esempio, che potrebbe sembrare folle. È la mia unica opzione per "hackerare" questo fornendo una "d" iniziale (sotto) con un singolo oggetto, o c'è un modo migliore?
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
Grazie!
Sì, questo è il comportamento predefinito? –
I dizionari ordinati non riordinano il contenuto al momento dell'inserimento. Ricordano l'ordine di inserzione e possono essere ordinati, ma non si limitano a ordinare automaticamente quando si aggiungono le chiavi. Per questo stai cercando qualcosa come SortedCollection. IIRC c'è una ricetta per uno (http://code.activestate.com/recipes/577197-sortedcollection/) che usa il modulo bisect, ma OrderedDict non è abbastanza da solo. –
Potrebbe essere possibile eseguire il rollover, magari considerare l'utilizzo di un ['heapq'] (https://docs.python.org/2/library/heapq.html#module-heapq) per preservare l'ordine internamente – GP89