Curso
A classificação é uma operação fundamental na manipulação de dados, e os dicionários em Python Python não são exceção. Seja num projeto complexo de análise de dados ou num script simples, saber como ordenar um dicionário por valor de forma eficiente pode ser super útil.
Neste artigo, vamos ver os vários jeitos de ordenar dicionários pelos seus valores em Python, garantindo que a gente tenha as ferramentas pra organizar nossos dados como precisarmos.
A resposta curta: Como ordenar um dicionário por valor em Python
Pra classificar rapidinho um dicionário por valor, dá pra usar a função embutida do Python .sorted()
junto com uma função lambda
. Esse método é simples e eficiente para a maioria dos casos de uso.
student_scores = {
'Alex': 88,
'Ben': 75,
'Cyrus': 93,
'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))
print(sorted_by_values)
# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}
Agora, vamos dar um passo atrás e entender os dicionários Python e por que podemos precisar classificá-los.
O que são dicionários Python?
Python são são um tipo de estrutura de dados que armazena dados em pares de chave-valor. São super versáteis e permitem pesquisas, inserções e exclusões rápidas. Aqui vai um exemplo simples:
student_scores = {
'Alex': 88,
'Ben': 75,
'Cyrus': 93,
'Denver': 85
}
# No expected output
No dicionário acima, os nomes dos alunos são as chaves e suas notas são os valores.
Os dicionários são úteis em várias situações, tipo quando a gente precisa guardar e pegar dados de forma eficiente. Mas, às vezes, precisamos organizar esses dados por valores, em vez de chaves — tipo, quando queremos classificar os alunos pelas notas deles.
Como ordenar um dicionário por valor em Python
Agora, vamos dar uma olhada mais de perto na função .sorted()
em Python e como usá-la especificamente para classificar dicionários por valor.
Como ordenar um dicionário por valor usando .sorted()
A função .sorted()
é uma ferramenta poderosa e flexível para classificação em Python. Para ordenar um dicionário pelos seus valores, podemos usar uma função lambda para especificar que a ordenação deve ser baseada nos valores do dicionário.
student_scores = {
'Alex': 88,
'Ben': 75,
'Cyrus': 93,
'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))
print(sorted_by_values)
# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}
Neste exemplo, student_scores.items()
retorna um objeto de visualização que exibe uma lista dos pares chave-valor do dicionário. A função .sorted()
organiza esses pares pelos valores (item[1]
) e dict()
transforma a lista organizada de volta em um dicionário.
Como ordenar um dicionário por valor em ordem decrescente ou crescente
Por padrão, a função .sorted()
ordena em ordem crescente. Mas, dependendo da situação, dá pra mudar isso pra ordenar em ordem decrescente ou crescente, colocando o parâmetro reverse
como True
ou False
.
Como ordenar um dicionário em ordem crescente
Como já falamos, um dicionário vai ser ordenado em ordem crescente por padrão quando usar a função .sorted()
. Também podemos conseguir uma ordem crescente definindo o parâmetro reverse
como False
.
sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)
# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}
Como ordenar um dicionário em ordem decrescente
Se a gente quiser ordenar em ordem crescente, dá pra definir o reverse
parâmetro como True
.
sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)
# Expected output:
# {'Cyrus': 93, 'Alex': 88, 'Denver': 85, 'Ben': 75}
Bônus: Como ordenar um dicionário por chave em Python
Embora este artigo se concentre na classificação por valores, também é útil saber como classificar um dicionário por suas chaves. Isso pode ser feito de forma parecida usando a função .sorted()
.
sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)
# Expected output:
# {'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}
Para ordem decrescente, basta definir reverse=True
:
sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)
# Expected output:
# {'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}
Conclusão
Ordenar um dicionário pelos seus valores em Python é uma tarefa comum que pode ser facilmente realizada usando a função .sorted(). Se precisarmos dos dados em ordem crescente ou decrescente, entender essas técnicas vai deixar nossas tarefas de manipulação de dados mais simples e eficientes. Dominando esses métodos de classificação, podemos garantir que nossos dados sejam organizados de forma consistente para atender melhor às nossas necessidades.
Perguntas frequentes
P1: Posso ordenar um dicionário por valores se os valores forem strings em vez de números?
A1: Sim, dá pra ordenar um dicionário por valores, mesmo que os valores sejam strings. A função ` .sorted()
` vai organizar os valores em ordem alfabética crescente ou decrescente, assim como faz com os números.
PERGUNTA 2: Como posso ordenar um dicionário por valores se ele contém dicionários aninhados?
A2: Pra ordenar um dicionário com dicionários aninhados, a gente precisa definir uma função de ordenação personalizada que extraia e compare os valores aninhados relevantes. Isso precisa de uma função lambda mais complexa ou uma função separada para lidar com a comparação.
TERCEIRO TRIMESTRE: Posso ordenar um dicionário por valores no local, sem criar um novo dicionário?
A3: Não, os dicionários em Python são coleções sem ordem por padrão nas versões anteriores à 3.7 e, mesmo que eles mantenham a ordem de inserção a partir do Python 3.7, não tem nenhum método embutido pra organizá-los no lugar. Classificar um dicionário sempre resulta na criação de um novo dicionário com a ordem desejada.
4º TRIMESTRE: Qual é a complexidade temporal da classificação de um dicionário por valores em Python?
A4: A complexidade temporal da classificação de um dicionário por valores usando a função ` .sorted()
` é O(n log n), onde n é o número de pares chave-valor no dicionário. Isso porque o .sorted()
usa internamente o Timsort, um algoritmo de classificação híbrido com essa complexidade.
P5: Classificar um dicionário por valores vai mudar o dicionário original?
A5: Não, ordenar um dicionário por valores usando a função ` .sorted()
` cria um novo dicionário. O dicionário original continua igual.
