Pular para o conteúdo

Como Ordenar um Dicionário por Valor no Python

[

Ordenando um Dicionário em Python: Valores, Chaves e Mais

por Ian Currie

Você possui um dicionário, mas gostaria de ordenar os pares chave-valor. Talvez você tenha tentado passar um dicionário para a função sorted(), mas não obteve os resultados esperados. Neste tutorial, você aprenderá tudo o que precisa saber se deseja ordenar dicionários em Python.

Neste tutorial, você vai:

  • Rever como usar a função sorted()
  • Aprender como obter visões do dicionário para iterar
  • Entender como os dicionários são convertidos em listas durante a ordenação
  • Aprender a especificar uma chave de ordenação para ordenar um dicionário por valor, chave ou atributo aninhado
  • Revisar a compreensão de dicionário e o construtor dict() para reconstruir seus dicionários
  • Considerar estruturas de dados alternativas para seus dados chave-valor

Ao longo do caminho, você também usará o módulo timeit para cronometrar seu código e obter resultados tangíveis para comparar os diferentes métodos de ordenação de dados chave-valor. Você também considerará se um dicionário ordenado é realmente a melhor opção, pois não é um padrão particularmente comum.

Download Grátis: [Clique aqui para baixar o

Primeiro, você aprenderá alguns conhecimentos fundamentais antes de tentar ordenar um dicionário em Python.

Redescobrindo a Ordem de Dicionários em Python

Se você desejava manter um dicionário ordenado como uma estrutura de dados antes do Python 3.7, precisava usar a classe OrderedDict do módulo collections. No entanto, com a garantia de ordem de dicionários a partir do Python 3.7, você pode obter a ordem de inserção apenas usando um dicionário regular.

Agora que você tem uma compreensão básica da ordem de dicionários em Python, vamos explorar como podemos ordenar um dicionário. Vamos começar com a função sorted().

Usando a Função sorted()

A função sorted() permite ordenar uma sequência, como uma lista, em Python. No entanto, ela não funciona diretamente em um dicionário. Ao passar um dicionário para a função sorted(), o Python não sabe como você quer ordenar os pares chave-valor. Então, vamos ver como podemos resolver isso.

frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas)
print(frutas_ordenadas)

Output:

['abacaxi', 'banana', 'laranja', 'maçã']

Observe que a função sorted() ordena apenas as chaves do dicionário, e não os valores associados a elas. Para ordenar os pares chave-valor, precisamos usar algumas técnicas adicionais.

Obtendo Chaves, Valores ou Ambos de um Dicionário

Para ordenar os pares chave-valor de um dicionário, podemos usar o método items(), que retorna uma visão do dicionário contendo todos os pares chave-valor.

frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas.items())
print(frutas_ordenadas)

Output:

[('abacaxi', 9), ('banana', 3), ('laranja', 5), ('maçã', 2)]

Agora temos uma lista ordenada contendo os pares chave-valor do dicionário. A ordem é determinada pela ordem natural das tuplas, que compara primeiro o primeiro elemento de cada tupla e, em seguida, o segundo elemento, se houver.

Se quisermos ordenar pelo valor em vez da chave, podemos usar a função sorted() novamente, desta vez usando uma lambda function como a chave de ordenação.

frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas.items(), key=lambda x: x[1])
print(frutas_ordenadas)

Output:

[('maçã', 2), ('banana', 3), ('laranja', 5), ('abacaxi', 9)]

Agora os pares chave-valor são ordenados pelo valor em ordem crescente.

Você também pode ordenar pelo valor em ordem decrescente, simplesmente passando reverse=True para a função sorted().

frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas.items(), key=lambda x: x[1], reverse=True)
print(frutas_ordenadas)

Output:

[('abacaxi', 9), ('laranja', 5), ('banana', 3), ('maçã', 2)]

Agora os pares chave-valor são ordenados pelo valor em ordem decrescente.

Selecionando um Valor Aninhado com uma Chave de Ordenação

E se quisermos ordenar um dicionário por um valor aninhado em um dicionário? Podemos fazer isso usando múltiplas lambda functions como chave de ordenação.

dados = {"joao": {"idade": 25, "altura": 173}, "maria": {"idade": 30, "altura": 165}, "pedro": {"idade": 20, "altura": 180}}
dados_ordenados = sorted(dados.items(), key=lambda x: x[1]["altura"])
print(dados_ordenados)

Output:

[('maria', {'idade': 30, 'altura': 165}), ('joao', {'idade': 25, 'altura': 173}), ('pedro', {'idade': 20, 'altura': 180})]

Aqui, estamos usando uma lambda function para acessar a chave “altura” em cada dicionário aninhado. Isso nos permite ordenar o dicionário pela altura em ordem crescente.

Convertendo de Volta para um Dicionário

Se você quiser converter a lista ordenada de pares chave-valor de volta para um dicionário, pode fazer isso usando a função dict().

frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas.items(), key=lambda x: x[1])
frutas_ordenadas_dict = dict(frutas_ordenadas)
print(frutas_ordenadas_dict)

Output:

{'maçã': 2, 'banana': 3, 'laranja': 5, 'abacaxi': 9}

Agora temos um dicionário ordenado com base nos valores.

Considerando Questões Estratégicas e de Desempenho

Ao usar a função sorted() para ordenar um dicionário, é importante considerar questões estratégicas e de desempenho.

Uma abordagem comum é usar funções especiais de obtenção para aumentar o desempenho e a legibilidade do código. O módulo operator fornece funções como itemgetter() que podem ser usadas como a chave de ordenação.

from operator import itemgetter
frutas = {"banana": 3, "laranja": 5, "maçã": 2, "abacaxi": 9}
frutas_ordenadas = sorted(frutas.items(), key=itemgetter(1))
print(frutas_ordenadas)

Output:

[('maçã', 2), ('banana', 3), ('laranja', 5), ('abacaxi', 9)]

Neste exemplo, estamos usando o itemgetter(1) como chave de ordenação para obter o segundo elemento de cada tupla.

Também é importante considerar o desempenho ao usar diferentes estruturas de dados para seus dados chave-valor. O desempenho de diferentes estruturas de dados pode variar dependendo do tamanho e natureza dos seus dados.

Outra consideração importante é o desempenho da ordenação em si. Usar o algoritmo de ordenação certo para o seu problema pode fazer uma grande diferença no desempenho do seu código.

Por fim, é importante avaliar se um dicionário ordenado é realmente a melhor opção para o seu caso de uso. Embora seja uma capacidade útil em certas situações, ordenar um dicionário não é um padrão comum.

Conclusão

Ordenar um dicionário em Python pode ser feito usando a função sorted() juntamente com uma chave de ordenação adequada. Você pode ordenar os pares chave-valor com base em chaves, valores ou qualquer atributo aninhado.

Ao trabalhar com dicionários e ordenação, é importante considerar questões estratégicas e de desempenho, como o uso de funções especiais de obtenção e a escolha da estrutura de dados correta. Além disso, é importante avaliar se um dicionário ordenado é realmente a melhor opção para o seu caso de uso.

Agora que você conhece as técnicas para ordenar um dicionário em Python, você está pronto para aplicá-las aos seus próprios projetos.

Aproveite a versatilidade e poder dos dicionários em Python, seja para ordenar, pesquisar ou manipular dados chave-valor de maneira eficiente.