O OrderedDict do Python é uma subclasse de dict 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 collections do Python.
- Podemos criar um
OrderedDict
vazio e adicionar itens a ele. Se criarmos um OrderedDict passando um argumento de dicionário, a ordem 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 será movido para o final.
- O método
popitem
do OrderedDict remove os itens na ordem FIFO. Aceita um argumento booleanolast
, se for definido comoTrue
, 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 booleanolast
; se definido comoFalse
, o item é movido para o início do OrderedDict. - A partir do Python 3.6, a ordem é mantida para argumentos de palavra-chave passados para o construtor do OrderedDict; consulte PEP-468.
- Podemos usar a função
reversed()
com OrderedDict para iterar elementos na ordem inversa. - Testes de igualdade entre objetos OrderedDict são sensíveis à ordem e são implementados como
list(od1.items())==list(od2.items())
. - Testes de igualdade entre OrderedDict e outros objetos de mapeamento não são sensíveis à ordem, assim como em dicionários regulares. Isso permite que objetos OrderedDict sejam substituídos em qualquer lugar em que um dicionário regular seja usado.
Exemplos de OrderedDict em Python
Vamos dar uma olhada em alguns exemplos de código usando OrderedDict em Python.
Criando um 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 dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)
Resultado:
OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])
Adicionar, Substituir, Remover itens de OrderedDict
# adicionando elementos ao dicionário
ordered_dict['dog'] = 3
# substituindo um valor de chave do dicionário
ordered_dict['kiwi'] = 10
print(ordered_dict)
# removendo e adicionando 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 de OrderedDict
# movendo maçã para o final e cão 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 de OrderedDict
# retirar ú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 de 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)
Resultado:
True
False
True
Você pode baixar o código de exemplo completo do nosso Repositório no GitHub.
Referência: Documentação do Python
Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict