OrderedDict - Ricorda l'Ordine con il Quale Si Aggiungono Chiavi a un Dizionario
Scopo: Un OrderedDict
è una sottoclasse di dict
che ricorda l'ordine nel quale sono aggiunti i propri contenuti.
Un OrderedDict
è una sottoclasse di dict
che ricorda l'ordine nel quale sono aggiunti i propri contenuti.
# collections_ordereddict_iter.py
import collections
print('Dizionario Normale:')
d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
for k, v in d.items():
print(k, v)
print('\nOrderedDict:')
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
for k, v in d.items():
print(k, v)
Un normale dict
non tiene traccia dell'ordine di inserimento, e l'iterazione sull'oggetto produce i valori nell'ordine basato su come le chiavi sono conservate nella tabella hash; detto ordine è a sua volta influenzato da un valore casuale utilizzato per ridurre collisioni. Al contrario, in un OrderedDict
l'ordine nel quale gli elementi sono inseriti viene conservato e utilizzato quando si crea un iteratore.
$ python3 collections_ordereddict_iter.py Dizionario Normale: c C b B a A OrderedDict: a A b B c C
Uguaglianza
Un normale dict
cerca il suo contenuto quando deve verificare una uguaglianza. Un OrderedDict
considera anche l'ordine nel quale sono stati aggiunti gli elementi.
# collections_ordereddict_equality.py
import collections
print('dict :',)
d1 = {}
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d2 = {}
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'
print(d1 == d2)
print('OrderedDict:',)
d1 = collections.OrderedDict()
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d2 = collections.OrderedDict()
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'
print(d1 == d2)
In questo caso, visto che i due OrderedDict
sono creati da valori immessi in diverso ordine, sono considerati diversi.
$ python3 collections_ordereddict_equality.py dict : True OrderedDict: False
Riordinare
E' possibile modificare l'ordine delle chiavi in un OrderedDict
spostandole all'inizio o alla fine della sequenza utilizzando move_to_end()
.
# collections_ordereddict_move_to_end.py
import collections
d = collections.OrderedDict(
[('a', 'A'), ('b', 'B'), ('c', 'C')]
)
print('Prima:')
for k, v in d.items():
print(k, v)
d.move_to_end('b')
print('\nmove_to_end():')
for k, v in d.items():
print(k, v)
d.move_to_end('b', last=False)
print('\nmove_to_end(last=False):')
for k, v in d.items():
print(k, v)
L'argomento last
indica a move_to_end()
la direzione di spostamento dell'elemento che sarà l'ultimo nella sequenza se True
oppure il primo se False
.
3 collections_ordereddict_move_to_end.py Prima: a A b B c C move_to_end(): a A c C b B move_to_end(last=False): b B a A c C
Vedere anche:
- OrderedDict
- La documentazione della libreria standard per questo modulo
- PYTHONHASHSEED
- Variabile di ambiente per controllare il seme del valore casuale aggiunto all'algoritomo di hash per la locazione delle chiavi nel dizionario.