Como Usar a OrderedDict do Python?
OrderedDict vs dict in Python: A escolha certa para o trabalho
Escolhendo entre OrderedDict e dict
Durante muito tempo, os dicionários em Python eram estruturas de dados não ordenadas. Os desenvolvedores de Python estavam acostumados com isso e recorriam a listas ou outras sequências quando precisavam manter seus dados ordenados. Com o passar do tempo, os desenvolvedores sentiram a necessidade de um novo tipo de dicionário que mantivesse a ordem dos itens.
Em 2008, a PEP 372 introduziu a ideia de adicionar uma nova classe de dicionário à biblioteca collections
. Seu principal objetivo era lembrar a ordem dos itens conforme definida pela ordem de inserção das chaves. Foi assim que surgiu o OrderedDict
.
Os desenvolvedores principais do Python queriam preencher essa lacuna e fornecer um dicionário que pudesse preservar a ordem das chaves inseridas. Isso permitiria uma implementação mais simples e direta de certos algoritmos e estruturas de dados. Portanto, o OrderedDict
foi adicionado à biblioteca collections
do Python.
Hoje em dia, o Python 3.6 introduziu uma mudança relevante: a classe dict
padrão também mantém a ordem dos itens. Isso ocorre porque a implementação interna do dict
agora usa uma tabela de hash que preserva a ordem de inserção. Isso levantou a seguinte pergunta: o OrderedDict
ainda é útil ou podemos usar o dict
padrão?
Neste tutorial, vamos explorar as características únicas do OrderedDict
e discutir os cenários em que ele ainda é útil, em comparação com o dict
. Vamos aprender a criar e usar objetos OrderedDict
em seu código e entender as vantagens e desvantagens de usar o OrderedDict
versus o dict
.
Com esse conhecimento, você será capaz de escolher a classe de dicionário que melhor se adapta às suas necessidades e preservar a ordem dos itens quando necessário.
Começando com o OrderedDict do Python
Criando objetos OrderedDict
Para começar, vamos aprender a criar objetos OrderedDict
. A criação de um objeto OrderedDict
é semelhante à criação de um dict
:
No entanto, a principal diferença é que o OrderedDict
preserva a ordem dos elementos conforme eles são inseridos. Vamos ver um exemplo:
A saída será:
Observe como os elementos são mostrados na ordem em que foram inseridos. A capacidade de manter a ordem dos itens por inserção é uma das principais vantagens do OrderedDict
.
Gerenciando itens em um OrderedDict
Agora que sabemos como criar um OrderedDict
, vamos aprender a gerenciar os itens em um OrderedDict
. Podemos adicionar, remover e atualizar itens em um OrderedDict
, assim como faríamos com um dict
.
Adicionando itens
Para adicionar itens a um OrderedDict
, podemos usar a mesma sintaxe que usaríamos com um dict
:
Podemos adicionar um único item ou vários itens de uma vez.
Removendo itens
Podemos remover itens de um OrderedDict
usando o método pop()
:
Isso removerá o item com a chave 'A'
do OrderedDict
.
Atualizando itens
Podemos atualizar os valores dos itens existentes em um OrderedDict
simplesmente atribuindo um novo valor à chave correspondente:
A chave 'A'
agora terá o valor 100
.
Iterando sobre um OrderedDict
Um dos benefícios do OrderedDict
é que ele preserva a ordem dos itens ao iterar sobre eles. Podemos fazer isso usando um loop for
:
A saída será:
Observe como os itens são mostrados na ordem em que foram inseridos. Isso pode ser útil quando precisamos manter uma lógica específica com base na ordem dos itens.
Iterando em ordem reversa com reversed()
Outra vantagem do OrderedDict
é que podemos iterar sobre os itens em ordem reversa usando a função reversed()
:
A saída será:
Isso pode ser útil quando precisamos percorrer os itens em ordem inversa.
Explorando as características únicas do OrderedDict do Python
O OrderedDict
do Python possui algumas características exclusivas que o diferenciam do dict
padrão. Vamos explorar algumas delas aqui.
Reordenando itens com .move_to_end()
Um dos recursos exclusivos do OrderedDict
é a capacidade de reordenar itens usando o método move_to_end()
. Esse método move um item existente para o final do OrderedDict
. Vamos ver um exemplo:
A saída será:
Observe como o item com a chave 'A'
agora está no final do OrderedDict
. Isso pode ser útil quando precisamos alterar a ordem dos itens com base em alguma lógica específica.
Removendo itens com .popitem()
Outra funcionalidade útil do OrderedDict
é a capacidade de remover o último item inserido usando o método popitem()
:
A saída será:
Observe como o item com a chave 'C'
foi removido do OrderedDict
.
Testar igualdade entre dicionários
Podemos usar o operador de igualdade ==
para verificar se dois dicionários são iguais. No entanto, a ordem dos itens em um dict
não é levada em consideração durante essa comparação.
No entanto, no OrderedDict
, a ordem dos itens é levada em consideração ao comparar dois dicionários. Vamos ver um exemplo:
A saída será False
, porque a ordem dos itens é diferente nos dois OrderedDicts
.
Adicionando novos atributos a uma instância de dicionário
Uma outra característica interessante do OrderedDict
é a capacidade de adicionar novos atributos a uma instância de dicionário. Vamos ver um exemplo:
A saída será 'New Attribute'
. Isso permite uma flexibilidade adicional ao trabalhar com OrderedDicts
.
Mesclando e atualizando dicionários com operadores
Podemos mesclar e atualizar dicionários usando operadores como +
e |
. No entanto, precisamos ter cuidado ao usar esses operadores com OrderedDicts
e dicts
regulares.
Vamos ver um exemplo:
Ao executar esse código, você obterá um erro, pois o operador +
não está definido para OrderedDicts
.
No entanto, podemos usar o operador |
para mesclar dois OrderedDicts
:
Agora, merged_dict
será um OrderedDict
que contém os itens de ambos os dicionários mesclados na ordem correta.
Podemos usar os mesmos operadores para mesclar e atualizar um OrderedDict
com um dict
regular. O resultado será um OrderedDict
. Vamos ver um exemplo:
O merged_dict
neste caso será um OrderedDict
, preservando a ordem dos itens.
Considerando o desempenho
Quando se trata de desempenho, o OrderedDict
tem um custo adicional em relação ao dict
padrão. Isso ocorre porque o OrderedDict
precisa manter a ordem dos itens usando uma estrutura de dados extra, enquanto o dict
padrão não precisa fazer isso.
No entanto, em muitos casos, a diferença de desempenho é insignificante. A menos que você esteja trabalhando com uma grande quantidade de itens ou precise otimizar a velocidade em um cenário específico, a diferença de desempenho entre OrderedDict
e dict
provavelmente não será um problema. Se você está apenas preocupado em manter a ordem dos itens, o custo adicional de desempenho do OrderedDict
pode ser aceitável.
Escolhendo o dicionário certo para o trabalho
Ao escolher entre OrderedDict
e dict
, você deve considerar as necessidades específicas do seu projeto. Aqui estão algumas perguntas que você pode fazer:
- Você precisa manter a ordem dos itens em um dicionário?
- Você precisa iterar sobre os itens de um dicionário na ordem em que foram inseridos?
- Você precisa reordenar ou remover itens de um dicionário com base em alguma lógica específica?
- O desempenho é crítico no seu projeto?
Se você respondeu “sim” a alguma dessas perguntas, o OrderedDict
pode ser a escolha certa para o seu projeto. Caso contrário, o dict
padrão provavelmente atenderá às suas necessidades.
Construindo uma fila baseada em dicionário
Agora que entendemos as características do OrderedDict
, podemos ver um exemplo prático de como ele pode ser usado para criar uma fila baseada em dicionário. Vamos implementar uma fila simples usando OrderedDict
:
Nesta implementação, usamos um OrderedDict
para armazenar os itens da fila. Ao adicionar um novo item à fila, nós o inserimos no final do OrderedDict
. Ao remover itens da fila, usamos popitem()
para remover o item no início da fila, que é sempre o primeiro item inserido.
Essa implementação nos permite manter a ordem dos itens na fila e oferece métodos simples para adicionar e remover itens da fila.
Conclusão
Neste tutorial, exploramos as diferenças entre OrderedDict
e dict
em Python. Embora o dict
padrão tenha sido atualizado para manter a ordem dos itens, o OrderedDict
ainda oferece recursos exclusivos que podem ser úteis em determinadas situações.
Agora você tem o conhecimento necessário para escolher a classe de dicionário que melhor atende às suas necessidades. Se você precisa manter a ordem dos itens ou realizar operações específicas de reordenação ou remoção, considere usar OrderedDict
. Caso contrário, o dict
padrão provavelmente será suficiente.
Espero que este tutorial tenha sido útil para entender as diferenças e escolher a classe de dicionário certa para o trabalho. Agora você pode aproveitar ao máximo o poder dos dicionários em Python!