Tamanho de fonte
Alto contraste
Altura de linha
Entrar Cadastrar

Como ordenar um dicionário por valor?

Avatar de Ana Maria Gomes Ana Maria Gomes
8 minutos de leitura 03/03/2024 • Atualizado 9 horas atrás 5xp

Ordenar um dicionário pelos seus valores é uma tarefa comum na programação Python, especialmente quando se lida com dados lidos de bancos de dados ou outras fontes estruturadas. Ao trabalhar com dicionários Python, você frequentemente precisa reorganizar os pares chave-valor com base nos valores armazenados, não nas chaves.

Neste guia completo, vamos explorar todas as formas de ordenar um dicionário Python por valor, tanto em ordem crescente quanto decrescente. Você aprenderá a reorganizar os itens do dicionário usando diferentes técnicas, desde as mais modernas até soluções para versões antigas do Python.

Este tutorial ensina como reordenar os elementos internos de um único dicionário. Se você está trabalhando com uma lista contendo vários dicionários e precisa ordenar essa lista, temos um guia específico sobre como ordenar uma lista de dicionários em Python.

Por que ordenar um dicionário por valor?

Antes de mergulharmos nas técnicas, é importante entender quando ordenar dicionário Python por valor é necessário. Alguns cenários comuns incluem:

  • Classificar resultados de contagem (ex: palavras mais frequentes em um texto);
  • Organizar pontuações de jogadores em ordem de ranking;
  • Ordenar produtos por preço ou popularidade;
  • Exibir dados estatísticos em ordem de relevância;

Em todos esses casos, você tem um dicionário onde as chaves representam identificadores (nomes, IDs, produtos) e os valores são números ou strings que você deseja usar como critério de ordenação.

Ordenando os pares chave-valor de um dicionário

A partir do Python 3.7, os dicionários mantêm a ordem de inserção por padrão. Isso é fundamental ao ordenar um dicionário Python por valor, pois o novo dicionário preserva a ordem estabelecida pela ordenação.

Método 1: Usando Dictionary Comprehension

A forma mais elegante e pythônica de ordenar dicionário por valor é utilizando dictionary comprehension combinada com a função sorted():

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
dicionario_ordenado = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
print(dicionario_ordenado)
Testar

A saída será um novo dicionário com os pares chave-valor ordenados em ordem crescente pelos valores:

{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

Como funciona:

  1. x.items() retorna todos os pares chave-valor do dicionário como tuplas
  2. sorted() ordena essas tuplas usando o key=lambda item: item[1], que significa “ordene pelo segundo elemento da tupla” (o valor)
  3. A dictionary comprehension {k: v for k, v} reconstrói o dicionário ordenado

Método 2: usando a função dict()

Alternativamente, você pode ordenar um dicionário Python por valor usando a função dict() para converter os itens ordenados:

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
dicionario_ordenado = dict(sorted(x.items(), key=lambda item: item[1]))
print(dicionario_ordenado)
Testar

Este método produz o mesmo resultado e é igualmente eficiente. A escolha entre dictionary comprehension e dict() é uma questão de preferência pessoal ao ordenar dicionário por valor.

Exemplo prático: ordenando pontuações de jogadores

pontuacoes = {'Alice': 85, 'Bob': 92, 'Carlos': 78, 'Diana': 95}
ranking = {k: v for k, v in sorted(pontuacoes.items(), key=lambda item: item[1], reverse=True)}
print(ranking)

# Saída: {'Diana': 95, 'Bob': 92, 'Alice': 85, 'Carlos': 78}
Testar

Note o parâmetro reverse=True para ordenar o dicionário Python em ordem decrescente, colocando as maiores pontuações primeiro.

Ordenação em versões anteriores do Python

Em versões anteriores ao Python 3.7, os dicionários não garantem a preservação da ordem. No entanto, você ainda pode ordenar dicionário Python por valor obtendo uma representação ordenada.

Usando operator.itemgetter()

O módulo operator fornece uma alternativa mais performática à função lambda ao ordenar um dicionário por valor:

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
print(sorted_x)
Testar

Vantagens do operator.itemgetter():

  • Mais rápido que funções lambda para grandes conjuntos de dados
  • Código mais limpo e explícito
  • Ideal para ordenar dicionários Python com muitos itens

sorted_x será uma lista de tuplas ordenadas pelo segundo elemento (o valor) em cada tupla. Para convertê-la de volta em dicionário:

dicionario_ordenado = dict(sorted_x)

Ordenação por valores usando collections.OrderedDict

Se você está trabalhando com Python 3.6 ou versões anteriores e precisa garantir que os pares chave-valor permaneçam ordenados, use collections.OrderedDict:

import collections
import operator

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
dicionario_ordenado = collections.OrderedDict(sorted_x)
print(dicionario_ordenado)
Testar

O OrderedDict garante que os itens do dicionário mantenham a ordem de inserção, mesmo em versões antigas do Python. 

Ordenação simples por valores

Para uma abordagem direta quando você precisa apenas das chaves ordenadas (sem reconstruir o dicionário completo), use:

dict1 = {'maçã': 3, 'banana': 1, 'laranja': 2}
chaves_ordenadas = sorted(dict1, key=dict1.get)
print(chaves_ordenadas)
# Saída: ['banana', 'laranja', 'maçã']
Testar

Como funciona:

  • dict1.get é um método que retorna o valor associado a cada chave
  • sorted(dict1, key=dict1.get) ordena as chaves com base em seus valores correspondentes

Esta técnica é útil quando você precisa apenas da sequência ordenada de chaves para iterar sobre o dicionário na ordem correta.

Usando lambda para ordenar um dicionário por valor

Funções lambda oferecem máxima flexibilidade ao ordenar um dicionário Python por valor. Vamos explorar diferentes cenários:

Ordenação crescente

d = {'one': 1, 'three': 3, 'five': 5, 'two': 2, 'four': 4}
itens_ordenados = sorted(d.items(), key=lambda x: x[1])
print(itens_ordenados)
# Saída: [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
Testar

O método d.items() retorna os pares chave-valor do dicionário, e a função lambda x: x[1] indica que a ordenação deve ser feita com base no valor (segundo elemento da tupla).

Ordenação decrescente

Para ordenar o dicionário Python em ordem decrescente, adicione reverse=True:

d = {'one': 1, 'three': 3, 'five': 5, 'two': 2, 'four': 4}
itens_ordenados_desc = sorted(d.items(), key=lambda x: x[1], reverse=True)
print(itens_ordenados_desc)
# Saída: [('five', 5), ('four', 4), ('three', 3), ('two', 2), ('one', 1)]
Testar

Ordenação por critérios complexos

As funções lambda também permitem ordenar dicionário por valor usando critérios mais complexos:

# Ordenar por valor absoluto (útil para números negativos)
d = {'a': -5, 'b': 3, 'c': -8, 'd': 1}
ordenado_abs = dict(sorted(d.items(), key=lambda x: abs(x[1])))
print(ordenado_abs)
# Saída: {'d': 1, 'b': 3, 'a': -5, 'c': -8}

# Ordenar strings por comprimento (valores são strings)
palavras = {'python': 'linguagem', 'js': 'script', 'c': 'compilada'}
ordenado_comprimento = dict(sorted(palavras.items(), key=lambda x: len(x[1])))
print(ordenado_comprimento)
Testar

Esta flexibilidade torna as funções lambda ideais para cenários personalizados ao ordenar um dicionário Python por valor.

Resumo

Ordenar um dicionário por valor no Python pode ser feito usando vários métodos, dependendo da versão do Python que você está usando. Nas versões modernas do Python (3.7+), você pode ordenar dicionários diretamente e manter a ordem dos pares chave-valor. Em versões mais antigas, você pode ordenar os itens e então criar um OrderedDict ou converter os itens ordenados de volta em um dicionário.

Para ordenação simples, você pode usar a função sorted() com o parâmetro key definido para dict.get, e para mais controle, você pode usar uma função lambda para especificar o comportamento da ordenação. Seja para ordenar um dicionário Python em ordem crescente ou decrescente, esses métodos ajudarão você a organizar os itens do seu dicionário de forma eficiente.

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

30xp
Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov