Python OrderedDict

Python OrderedDict es una subclase de dict que mantiene el orden de inserción de los elementos. Cuando iteramos sobre un OrderedDict, los elementos se devuelven en el orden en que se insertaron. Un diccionario regular no realiza un seguimiento del orden de inserción. Por lo tanto, al iterar sobre él, los elementos se devuelven en un orden arbitrario. Cuando queremos asegurarnos de que los elementos se devuelvan en el orden en que se insertaron, podemos usar OrderedDict.

Python OrderedDict

  • OrderedDict es parte del módulo colecciones de Python.
  • Podemos crear un OrderedDict vacío y agregar elementos a él. Si creamos un OrderedDict pasando un argumento de tipo dict, entonces el orden puede perderse porque dict no mantiene el orden de inserción.
  • Si un elemento se sobrescribe en OrderedDict, se mantiene su posición.
  • Si un elemento se elimina y se agrega nuevamente, entonces se mueve al final.
  • OrderedDict popitem elimina los elementos en orden FIFO. Acepta un argumento booleano last, si se establece en True, los elementos se devuelven en orden LIFO.
  • Podemos mover un elemento al principio o al final de OrderedDict usando la función move_to_end. Acepta un argumento booleano last, si se establece en False, entonces el elemento se mueve al principio del dict ordenado.
  • A partir de python 3.6 en adelante, se mantiene el orden para los argumentos de palabras clave pasados al constructor de OrderedDict, consulta PEP-468.
  • Podemos usar la función reversed() con OrderedDict para iterar los elementos en orden inverso.
  • Las pruebas de igualdad entre objetos OrderedDict son sensibles al orden y se implementan como list(od1.items())==list(od2.items()).
  • Las pruebas de igualdad entre OrderedDict y otros objetos de mapeo no son sensibles al orden como los diccionarios regulares. Esto permite que los objetos OrderedDict se sustituyan en cualquier lugar donde se use un diccionario regular.

Ejemplos de OrderedDict en Python

Vamos a ver algunos ejemplos de código de OrderedDict en Python.

Creando un objeto OrderedDict

from collections import OrderedDict

# creando un dict simple
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# creando un OrderedDict vacío
ordered_dict = OrderedDict()
print(ordered_dict)

# creando un OrderedDict desde un dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

Salida:

OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])

Agregando, reemplazando, eliminando elementos de OrderedDict

# añadiendo elementos al diccionario
ordered_dict['dog'] = 3

# reemplazando un valor de clave en el diccionario
ordered_dict['kiwi'] = 10
print(ordered_dict)

# eliminando y añadiendo un valor
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)

Salida:

OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])

Ejemplo de move_to_end de OrderedDict

# moviendo "apple" al final y "dog" al principio
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

Salida:

OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])

Ejemplo de popitem de OrderedDict

# sacando el último elemento
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

Salida:

('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])

Iteración inversa de OrderedDict

# iteración inversa
for item in reversed(ordered_dict):
    print(item)

Salida:

kiwi
cat
dog

Ejemplo de pruebas de igualdad de OrderedDict

# pruebas de igualdad
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}

od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})

print(d1 == d2)
print(od1 == od2)
print(d1 == od1)

Salida:

True
False
True

Puedes descargar el código completo del ejemplo desde nuestro Repositorio de GitHub.

Referencia: Documentación de Python

Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict