Pular para o conteúdo

Como Ordenar um Dicionário em Python por Valor

[

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

por Ian Currie estruturas-de-dados intermediário

Neste tutorial, você aprenderá a:

  • Revisar como usar a função sorted()
  • Aprender como obter visões de dicionário para iterar sobre eles
  • Entender como os dicionários são convertidos em listas durante a ordenação
  • Aprender como especificar uma chave de ordenação para ordenar um dicionário por valor, chave ou atributo aninhado
  • Revisar as compreensões 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 medir o desempenho do 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 esse padrão não é muito comum.

Download Gratuito: [Clique aqui para baixar o

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

Redescobrindo a Ordem dos Dicionários em Python

Se você desejava manter um dicionário ordenado como uma estrutura de dados antes disso, precisava usar o OrderedDict da biblioteca collections. No entanto, agora é possível obter a mesma ordem de inserção diretamente com os dicionários nativos do Python.

Agora que você sabe que a ordem dos dicionários é preservada a partir do Python 3.7, vamos ver como realmente podemos ordenar um dicionário.

Ordenando Dicionários em Python

Existem várias maneiras de ordenar um dicionário em Python. Vamos explorar algumas opções aqui.

Usando a função sorted()

Uma maneira simples de ordenar um dicionário é usar a função sorted(). Essa função retorna uma nova lista com os pares chave-valor ordenados com base na chave.

my_dict = {'b': 2, 'a': 1, 'c': 3}
sorted_dict = sorted(my_dict.items())

Neste exemplo, o dicionário my_dict é ordenado pela chave usando a função sorted(). O resultado é uma lista de tuplas com os pares chave-valor ordenados:

[('a', 1), ('b', 2), ('c', 3)]

Obtendo Chaves, Valores ou Ambos de um Dicionário

Outra opção é usar os métodos keys(), values() ou items() de um dicionário para obter uma visão das chaves, valores ou pares chave-valor, respectivamente. Em seguida, você pode ordenar essa visão usando a função sorted() da mesma maneira que mostrado anteriormente.

my_dict = {'b': 2, 'a': 1, 'c': 3}
sorted_keys = sorted(my_dict.keys())
sorted_values = sorted(my_dict.values())
sorted_items = sorted(my_dict.items())

Neste exemplo, as chaves, valores e pares chave-valor do dicionário my_dict são ordenados separadamente usando a função sorted().

Entendendo como o Python Ordena Tuplas

Quando você ordena uma lista de tuplas, o Python usa a ordem lexicográfica para determinar a classificação. Isso significa que ele compara o valor da primeira posição em cada tupla e, em seguida, o valor da segunda posição, e assim por diante.

Por exemplo, se você tiver a seguinte lista de tuplas:

my_list = [(2, 'b'), (1, 'a'), (3, 'c')]
sorted_list = sorted(my_list)

O Python comparará primeiro os valores das primeiras posições das tuplas (2, 'b'), (1, 'a') e (3, 'c'). Como 1 é menor que 2, o Python classificará (1, 'a') antes de (2, 'b'). Em seguida, ele comparará os valores das segundas posições e classificará o resto da lista com base nesse critério.

O resultado será:

[(1, 'a'), (2, 'b'), (3, 'c')]

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

Às vezes, você pode querer ordenar um dicionário por valores em vez de chaves. Para fazer isso, você pode usar o parâmetro key da função sorted() juntamente com uma função lambda.

my_dict = {'b': 2, 'a': 1, 'c': 3}
sorted_dict = sorted(my_dict.items(), key=lambda x: x[1])

Neste exemplo, o dicionário my_dict é ordenado pelos valores usando uma função lambda como a chave de ordenação. A função lambda recebe cada par chave-valor e retorna o valor, que é usado como critério de ordenação.

O resultado será:

[('a', 1), ('b', 2), ('c', 3)]

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

Se você tiver um dicionário aninhado e quiser ordená-lo com base em um valor específico dentro do aninhamento, poderá usar uma chave de ordenação mais complexa.

my_dict = {'a': {'value': 2}, 'b': {'value': 1}, 'c': {'value': 3}}
sorted_dict = sorted(my_dict.items(), key=lambda x: x[1]['value'])

Neste exemplo, o dicionário my_dict contém dicionários aninhados. Usamos uma função lambda como chave de ordenação para selecionar o valor 'value' dentro de cada dicionário aninhado. Em seguida, o Python ordena os pares chave-valor com base nesse valor.

O resultado será:

[('b', {'value': 1}), ('a', {'value': 2}), ('c', {'value': 3})]

Convertendo de Volta para um Dicionário

Após ordenar um dicionário usando a função sorted(), você pode converter a lista de pares chave-valor de volta para um dicionário usando o construtor dict().

sorted_dict = dict(sorted(my_dict.items()))

Neste exemplo, a função sorted() é usada para ordenar os pares chave-valor do dicionário my_dict, e o construtor dict() é usado para converter a lista ordenada de volta para um dicionário.

O resultado será:

{'a': 1, 'b': 2, 'c': 3}

Considerando Questões Estratégicas e de Desempenho

Ao trabalhar com dicionários grandes, a ordenação pode levar um tempo significativo. Se você estiver preocupado com o desempenho, considere usar funções especiais do módulo operator, como itemgetter(), para aumentar a performance da ordenação.

Outra consideração importante é o uso de um dicionário ordenado versus outras estruturas de dados. O dicionário ordenado pode não ser a melhor opção em todos os cenários, principalmente quando a ordem dos pares chave-valor não é importante.

Além disso, ao comparar o desempenho de diferentes estruturas de dados e métodos de ordenação, é importante medir o tempo de execução usando o módulo timeit ou outras ferramentas de medição de desempenho.

Conclusão

Agora você sabe como ordenar um dicionário em Python. Você aprendeu a usar a função sorted() para ordenar pares chave-valor, a obter visões de dicionário para iterar sobre eles, a especificar uma chave de ordenação para classificar um dicionário por valor, chave ou atributo aninhado, e também a converter de volta para um dicionário ordenado.

Você também considerou questões estratégicas e de desempenho ao decidir se deve usar um dicionário ordenado ou outras estruturas de dados. Você viu que a ordenação de um dicionário pode levar algum tempo e que é importante medir o desempenho para comparar métodos e escolher a melhor opção para o seu caso de uso específico.

Espero que este tutorial tenha sido útil e que você possa aplicar esses conceitos ao trabalhar com dicionários em Python.