Pular para o conteúdo

Como Ordenar Dicionários em Python por Valor

[

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

por Ian Currie data-structures intermediário

Neste tutorial, você irá:

  • Revisar como utilizar a função sorted()
  • Aprender a obter visões de dicionário para iterar sobre eles
  • Compreender como os dicionários são transformados 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 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 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 Gratuito: [Clique aqui para baixar o

Primeiro, você aprenderá alguns conhecimentos 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 a classe OrderedDict do módulo collections do Python. No entanto, com as mudanças na implementação do Python 3.6, você pode confiar na ordem de inserção em um dicionário comum.

Agora que você sabe disso, vamos ver como é possível ordenar um dicionário em Python.

Ordenando Dicionários em Python

Utilizando a função sorted()

A maneira mais simples de ordenar um dicionário em Python é usando a função sorted(). Essa função retorna uma nova lista contendo os pares chave-valor do dicionário, ordenados pela chave. Veja um exemplo:

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

Output:

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

Observe que o retorno é uma lista de tuplas contendo os pares chave-valor ordenados.

Obtendo Chaves, Valores ou Ambos de um Dicionário

Além de ordenar o dicionário inteiro, você pode obter apenas as chaves ou apenas os valores do dicionário ordenados. Para isso, você pode usar os métodos keys(), values() e items() do dicionário.

Veja um exemplo de como obter uma lista ordenada de chaves:

my_dict = {'a': 3, 'b': 1, 'c': 2}
sorted_keys = sorted(my_dict.keys())
print(sorted_keys)

Output:

['a', 'b', 'c']

Da mesma forma, você pode obter uma lista ordenada de valores usando o método values():

my_dict = {'a': 3, 'b': 1, 'c': 2}
sorted_values = sorted(my_dict.values())
print(sorted_values)

Output:

[1, 2, 3]

E se você quiser retornar os pares chave-valor ordenados como uma lista de tuplas, você pode usar o método items():

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

Output:

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

Compreendendo Como o Python Ordena Tuplas

Você pode estar se perguntando como o Python ordena as tuplas quando você faz a ordenação de um dicionário. O Python usa uma abordagem chamada ordenada lexicograficamente, que compara os elementos um a um em ordem de suas posições.

Por exemplo, se você tiver uma lista de tuplas contendo strings e números, o Python primeiro comparará as primeiras strings entre si em ordem alfabética. Se houver empate, será feita uma comparação entre os números. Por fim, se ainda houver empate, será feita uma comparação entre as segundas strings e assim por diante.

Vamos ver um exemplo para ilustrar isso:

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

Output:

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

Observe que as strings "a", "b" e "c" foram comparadas lexicograficamente para determinar a ordem de classificação das tuplas.

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

Se você quiser ordenar um dicionário por valores em vez de chaves, pode usar o parâmetro key da função sorted() em conjunto com uma função lambda. A função lambda recebe cada par chave-valor como entrada e retorna o valor para ser usado como critério de ordenação.

Veja um exemplo de como ordenar um dicionário por valores:

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

Output:

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

Neste exemplo, a função lambda lambda x: x[1] retorna o segundo elemento (o valor) de cada par chave-valor, ou seja, o critério de ordenação é o valor do dicionário.

Você também pode usar uma função lambda para ordenar um dicionário por chaves. Veja um exemplo:

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

Output:

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

Neste caso, a função lambda lambda x: x[0] retorna o primeiro elemento (a chave) de cada par chave-valor, ou seja, o critério de ordenação é a chave do dicionário.

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

Se o seu dicionário contiver valores aninhados, você poderá usar uma chave de ordenação para selecionar o valor específico que deseja usar como critério de ordenação. A chave de ordenação é uma maneira de extrair um valor de um objeto complexo, como uma lista ou um dicionário aninhado, que será usado para comparar os elementos durante a ordenação.

Vamos ver um exemplo para entender melhor. Digamos que você tenha um dicionário onde as chaves são nomes de pessoas e os valores são outros dicionários contendo informações sobre cada pessoa, como idade e cidade:

people = {
'Alice': {'age': 25, 'city': 'New York'},
'Bob': {'age': 30, 'city': 'Chicago'},
'Charlie': {'age': 35, 'city': 'Boston'}
}

Agora, se você quiser ordenar esse dicionário com base na idade das pessoas, você pode usar uma chave de ordenação que retorna o valor da chave 'age' de cada pessoa:

sorted_people = sorted(people.items(), key=lambda x: x[1]['age'])
print(sorted_people)

Output:

[('Alice', {'age': 25, 'city': 'New York'}), ('Bob', {'age': 30, 'city': 'Chicago'}), ('Charlie', {'age': 35, 'city': 'Boston'})]

Neste exemplo, a função lambda lambda x: x[1]['age'] seleciona o valor da chave 'age' do dicionário aninhado de cada pessoa, e esse valor é usado como critério de ordenação.

Convertendo de Volta para um Dicionário

Depois de ordenar um dicionário, talvez você queira convertê-lo de volta para um dicionário. Você pode fazer isso usando a função dict() em conjunto com a lista ordenada de pares chave-valor.

Veja um exemplo:

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

Output:

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

Observe que o resultado é um novo dicionário contendo os mesmos pares chave-valor do dicionário original, porém agora eles estão na ordem correta.

Considerando Questões Estratégicas e de Desempenho

Antes de decidir utilizar um dicionário ordenado, é importante considerar algumas questões estratégicas e de desempenho. Embora o Python 3.6 e versões posteriores garantam a ordem de inserção nos dicionários, esta não é uma característica amplamente utilizada, comparada com outras estruturas de dados.

Se você precisa acessar os valores do dicionário em uma ordem específica com frequência, é mais eficiente utilizar uma lista de tuplas ou objetos, onde a ordem pode ser garantida através da ordenação. No entanto, se a ordem não for uma preocupação e você estiver buscando desempenho máximo para operações de busca e inserção, o dicionário padrão é a melhor escolha.

Em relação ao desempenho, também é importante considerar o impacto da complexidade do algoritmo de ordenação escolhido. Alguns algoritmos de ordenação têm melhor desempenho com pequenas quantidades de dados, enquanto outros são mais eficientes para grandes conjuntos de dados. Vale a pena considerar o tamanho do seu dicionário e a quantidade de operações de ordenação que você realizará.

Conclusão

Agora, você sabe como ordenar um dicionário em Python! Neste tutorial, você aprendeu a utilizar a função sorted() para ordenar um dicionário por chaves, valores ou ambos. Também descobriu como especificar uma chave de ordenação usando funções lambda para ordenar por atributos aninhados. Além disso, você aprendeu a converter o dicionário ordenado de volta para um dicionário. E, por fim, considerou algumas questões estratégicas e de desempenho ao decidir usar um dicionário ordenado.

Lembre-se de que a ordenação de um dicionário é útil em certos contextos, mas nem sempre é necessária. Sempre avalie suas necessidades específicas antes de optar por usar um dicionário ordenado.

Continue praticando e explorando diferentes usos de dicionários em Python para se tornar um mestre em manipulação de dados chave-valor!