Python OrderedDict

O OrderedDict do Python é uma subclasse de dicionário que mantém a ordem de inserção dos itens. Quando iteramos sobre um OrderedDict, os itens são retornados na ordem em que foram inseridos. Um dicionário regular não rastreia a ordem de inserção. Portanto, ao iterar sobre ele, os itens são retornados em uma ordem arbitrária. Quando queremos garantir que os itens sejam retornados na ordem em que foram inseridos, podemos usar o OrderedDict.

Python OrderedDict

  • O OrderedDict faz parte do módulo coleções do Python.
  • Podemos criar um OrderedDict vazio e adicionar itens a ele. Se criarmos um OrderedDict passando um argumento de dicionário, a ordenação pode ser perdida, pois o dict não mantém a ordem de inserção.
  • Se um item for sobrescrito no OrderedDict, sua posição é mantida.
  • Se um item for excluído e adicionado novamente, ele se move para o final.
  • O popitem do OrderedDict remove os itens na ordem FIFO. Aceita um argumento booleano last, se definido como True, os itens são retornados na ordem LIFO.
  • Podemos mover um item para o início ou final do OrderedDict usando a função `move_to_end`. Ela aceita um argumento booleano `last`, se definido como `False`, o item é movido para o início do dicionário ordenado.
  • A partir do Python 3.6, a ordem é mantida para argumentos de palavras-chave passados para o construtor OrderedDict, consulte PEP-468.
  • Podemos usar a função `reversed()` com OrderedDict para iterar os elementos na ordem reversa.
  • Os testes de igualdade entre objetos OrderedDict são sensíveis à ordem e são implementados como `list(od1.items())==list(od2.items())`.
  • Os testes de igualdade entre OrderedDict e outros objetos de mapeamento não se importam com a ordem, como os dicionários regulares. Isso permite que objetos OrderedDict sejam substituídos em qualquer lugar em que um dicionário regular é usado.

Exemplos de OrderedDict em Python

Vamos ver alguns exemplos de código de OrderedDict em Python.

Criando objeto OrderedDict

from collections import OrderedDict

# criando um dicionário simples
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# criando um OrderedDict vazio
ordered_dict = OrderedDict()
print(ordered_dict)

# criando OrderedDict a partir de um dicionário
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

Saída:

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

Adicionar, Substituir, Remover itens de OrderedDict

# adicionar elementos ao dicionário
ordered_dict['dog'] = 3

# substituir um valor de chave no dicionário
ordered_dict['kiwi'] = 10
print(ordered_dict)

# remover e adicionar um valor
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)

Output:

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)])

Exemplo de move_to_end do OrderedDict

# movendo "apple" para o final e "dog" para o início
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

Output:

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

Exemplo de popitem do OrderedDict

# remover o último item
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

Output:

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

Iteração Reversa do OrderedDict

# iteração reversa
for item in reversed(ordered_dict):
    print(item)

Output:

kiwi
cat
dog

Exemplo de Testes de Igualdade de OrderedDict

# testes de igualdade
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)

Saída:

True
False
True

Você pode baixar o código completo do exemplo em nosso Repositório no GitHub.

Referência: Documentação do Python

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