Os dicionários em Python são estruturas muito poderosas e rápidas. Mas
uma característica ruim deles é que a ordem das chaves não é garantida.
Isso significa que ao criar um dicionário você pode ver algo assim:
Isso atrapalha quando queremos manter a ordem dos itens, como, por exemplo, ao alimentar um HTML SELECT a partir de um dicionário. Se você usa Django, provavelmente já precisou fazer isso em um
Era. A partir do Python 2.7, você pode usar um
Agora sim, com a ordem mantida.
Se você observar direitinho, informamos uma lista de tuplas, como eu disse que seria uma alternativa de solução. Então, qual a vantagem do
Algumas facilidades:
No exemplo acima, foi possível indexarmos pela chave e modificar o conteúdo sem mudar a ordem das chaves. Também incluímos um item ao final do dicionário com facilidade, apenas com uma atribuição normal de dicionário. Outra coisa simples de fazer é excluir um item, bastando indexarmos pela chave do dicionário. Ou seja, é um dicionário.
Assim, o uso dos
>>> d = {'ac': 'Acre', 'ce': 'Ceará', 'pi': 'Piauí'} >>> print(d) {'ac': 'Acre', 'pi': 'Piauí', 'ce': 'Ceará'} >>>Viu? Fora de ordem.
Isso atrapalha quando queremos manter a ordem dos itens, como, por exemplo, ao alimentar um HTML SELECT a partir de um dicionário. Se você usa Django, provavelmente já precisou fazer isso em um
choices. Nesse caso, o normal é criarmos uma lista de tuplas e iterar nos itens, o que não é lá muito intuitivo.Era. A partir do Python 2.7, você pode usar um
OrderedDict (que está no módulo collections) e resolver este problema:>>> from collections import OrderedDict >>> d = OrderedDict([('ac', 'Acre'), ('ce', 'Ceará'),
('pi', 'Piauí')]) >>> print(d) OrderedDict([('ac', 'Acre'), ('ce', 'Ceará'), ('pi', 'Piauí')]) >>>
Agora sim, com a ordem mantida.
Se você observar direitinho, informamos uma lista de tuplas, como eu disse que seria uma alternativa de solução. Então, qual a vantagem do
OrderedDict?
Algumas facilidades:
>>> d['ac'] = 'Novo Acre' >>> print(d) OrderedDict([('ac', 'Novo Acre'), ('ce', 'Ceará'), ('pi', 'Piauí')]) >>> >>> d['go'] = 'Goiás' >>> print(d) OrderedDict([('ac', 'Novo Acre'), ('ce', 'Ceará'), ('pi', 'Piauí'),
('go', 'Goiás')]) >>> >>> del d['ce'] >>> print(d) OrderedDict([('ac', 'Novo Acre'), ('pi', 'Piauí'), ('go', 'Goiás')]) >>>
No exemplo acima, foi possível indexarmos pela chave e modificar o conteúdo sem mudar a ordem das chaves. Também incluímos um item ao final do dicionário com facilidade, apenas com uma atribuição normal de dicionário. Outra coisa simples de fazer é excluir um item, bastando indexarmos pela chave do dicionário. Ou seja, é um dicionário.
Assim, o uso dos
OrderedDict deixa o código mais intuitivo, já que a sintaxe de dicionários, e com a garantia de manter a sequência das chaves.

Sobre o Autor
0 comentários: