Pular para o conteúdo

Como ordenar um dicionário por valor no Python?

[

Ordenando um Dicionário Python por Valor

Por Ian Currie


Muitas vezes, temos um dicionário em Python e gostaríamos de ordenar seus pares chave-valor. Talvez já tenhamos tentado passar um dicionário para a função sorted(), mas não obtivemos os resultados esperados. Neste tutorial, você aprenderá tudo o que precisa saber para ordenar dicionários em Python.

Revisando a função sorted()

Para ordenar um dicionário em Python, podemos usar a função sorted(). Essa função retorna uma lista de itens ordenados com base nas chaves do dicionário. Veja um exemplo:

>>> dicionario = {'b': 2, 'a': 1, 'c': 3}
>>> itens_ordenados = sorted(dicionario)
>>> print(itens_ordenados)
['a', 'b', 'c']

Neste exemplo, os itens do dicionário foram ordenados por suas chaves em ordem alfabética. Observe que a função sorted() retorna uma lista, não um dicionário.

Obtendo as Views do Dicionário

Para iterar sobre os pares chave-valor de um dicionário na ordem desejada, podemos usar as views do dicionário. As views são objetos dinâmicos que nos permitem acessar as chaves, os valores ou ambos do dicionário. Podemos convertê-las em uma lista para obter uma representação ordenada do nosso dicionário. Veja um exemplo:

>>> dicionario = {'b': 2, 'a': 1, 'c': 3}
>>> chaves_ordenadas = sorted(dicionario.keys())
>>> valores_ordenados = sorted(dicionario.values())
>>> pares_ordenados = sorted(dicionario.items())
>>> print(chaves_ordenadas)
['a', 'b', 'c']
>>> print(valores_ordenados)
[1, 2, 3]
>>> print(pares_ordenados)
[('a', 1), ('b', 2), ('c', 3)]

Neste exemplo, usamos as views keys(), values() e items() para obter as chaves, os valores e os pares chave-valor do dicionário, respectivamente. Em seguida, usamos a função sorted() para ordenar cada uma dessas listas.

Entendendo a Ordem de Ordenação do Python

Ao usar a função sorted() em um dicionário, o Python ordena os itens do dicionário com base em suas chaves. No entanto, se as chaves forem do mesmo tipo, o Python também irá ordenar os valores dos pares chave-valor. Veja um exemplo:

>>> dicionario = {'b': 2, 'a': 1, 'c': 3, 'd': 1}
>>> itens_ordenados = sorted(dicionario.items())
>>> print(itens_ordenados)
[('a', 1), ('b', 2), ('c', 3), ('d', 1)]

Neste exemplo, o dicionário contém duas chaves, 'a' e 'd', que possuem o mesmo valor 1. Ao ordenar os pares chave-valor com a função sorted(), o Python os mantém em sua ordem original. Portanto, 'a' aparece antes de 'd' na lista ordenada.

Usando o Parâmetro key e Funções Lambda

Em alguns casos, podemos querer ordenar um dicionário com base em um critério diferente, como os valores ou um atributo específico do valor. Para fazer isso, podemos usar o parâmetro key da função sorted() e uma função lambda para especificar o critério de ordenação. Veja um exemplo:

>>> dicionario = {'banana': 3, 'maçã': 1, 'laranja': 2}
>>> itens_ordenados = sorted(dicionario.items(), key=lambda x: x[1])
>>> print(itens_ordenados)
[('maçã', 1), ('laranja', 2), ('banana', 3)]

Neste exemplo, usamos uma função lambda como o valor do parâmetro key da função sorted(). A função lambda recebe um item do dicionário, representado como x, e retorna o valor desse item, que é usado como critério de ordenação. Assim, os pares chave-valor do dicionário são ordenados com base em seus valores.

Selecionando um Valor Aninhado como Chave de Ordenação

Se tivermos um dicionário com valores aninhados, podemos selecionar um valor específico como chave de ordenação, usando a função itemgetter() do módulo operator. Veja um exemplo:

from operator import itemgetter
dicionario = {'banana': {'preço': 3}, 'maçã': {'preço': 1}, 'laranja': {'preço': 2}}
itens_ordenados = sorted(dicionario.items(), key=itemgetter(1, 'preço'))
print(itens_ordenados)

Neste exemplo, temos um dicionário em que cada valor é um dicionário com uma chave 'preço'. Ao usar a função itemgetter() com os argumentos 1 e 'preço', especificamos que queremos ordenar os pares chave-valor com base no valor do atributo 'preço' dos dicionários aninhados. Assim, os pares chave-valor do dicionário são ordenados com base no preço em ordem crescente.

Convertendo de Volta para um Dicionário

Se precisarmos converter a lista de pares chave-valor em um novo dicionário ordenado, podemos usar o construtor dict(). Veja um exemplo:

>>> itens_ordenados = [('a', 1), ('b', 2), ('c', 3)]
>>> dicionario_ordenado = dict(itens_ordenados)
>>> print(dicionario_ordenado)
{'a': 1, 'b': 2, 'c': 3}

Neste exemplo, usamos a função dict() para criar um novo dicionário a partir da lista de pares chave-valor ordenada. O resultado é um novo dicionário com os mesmos pares chave-valor na ordem especificada.

Considerando Questões Estratégicas e de Desempenho

Antes de decidir usar um dicionário ordenado, é importante considerar as implicações estratégicas e de desempenho dessa decisão. Dicionários ordenados podem exigir mais recursos do sistema, tanto em termos de tempo de execução quanto de uso de memória. Portanto, é essencial avaliar se um dicionário ordenado é realmente a melhor opção para o seu caso de uso.

Uma alternativa a ser considerada é o uso de outras estruturas de dados, como listas ou conjuntos, dependendo das necessidades específicas do seu projeto. Por exemplo, se a ordem de inserção dos elementos é importante, você pode usar uma lista para manter a ordem original dos elementos. Ou, se a verificação de duplicatas for necessária, um conjunto pode ser a escolha certa.

Conclusão

Neste tutorial, você aprendeu várias maneiras de ordenar um dicionário em Python. Revisamos o uso da função sorted(), a obtenção das views do dicionário para iterar sobre seus pares chave-valor, o uso do parâmetro key e funções lambda para especificar um critério de ordenação personalizado, a seleção de um valor aninhado como chave de ordenação e a conversão da lista de pares chave-valor de volta para um novo dicionário.

Lembre-se de que a escolha de usar um dicionário ordenado deve ser feita com base nas necessidades e nos requisitos do seu projeto. Avalie cuidadosamente as implicações estratégicas e de desempenho e escolha a estrutura de dados mais adequada para o seu caso.

Espero que este tutorial tenha sido útil para você e que agora você se sinta confortável em ordenar dicionários em Python!