Como ordenar um dicionário por valor?

Luiza Pereira
4 minutos de leitura

Conteúdos do tutorial

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. Neste artigo, vamos explorar como ordenar dicionários pelos seus valores tanto em ordem crescente quanto decrescente.

Ordenação no Python 3.7+ e CPython 3.6

No Python 3.7 os dicionários mantêm a ordem de inserção. Isso significa que, quando você ordena um dicionário, o novo dicionário preservará essa ordem. Veja como você pode ordenar um dicionário pelos seus valores:

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)

A saída será um novo dicionário ordenado em ordem crescente pelos valores:

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

Alternativamente, você pode usar a função dict() para converter os itens ordenados de volta em um dicionário:

dicionario_ordenado = dict(sorted(x.items(), key=lambda item: item[1]))

Ordenação em Versões Anteriores do Python

Em versões anteriores do Python, os dicionários não mantêm a ordem. No entanto, você ainda pode ordenar os valores e obter uma representação de um dicionário ordenado usando uma lista de tuplas:

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

sorted_x será uma lista de tuplas ordenadas pelo segundo elemento (o valor) em cada tupla. Se você precisar de um dicionário, pode convertê-lo de volta usando dict(sorted_x).

Ordenação por Valores Usando collections.OrderedDict

Se você quiser manter um dicionário ordenado em versões mais antigas do Python, você pode usar collections.OrderedDict:

import collections
dicionario_ordenado = collections.OrderedDict(sorted_x)

Ordenação Simples por Valores

Para uma abordagem direta de ordenação por valores, você pode usar:

chaves_ordenadas = sorted(dict1, key=dict1.get)

Isso lhe dará uma lista de chaves ordenadas com base em seus valores correspondentes no dicionário.

Ordenação por Valores com uma Função Lambda

Você também pode ordenar um dicionário pelos seus valores usando uma função lambda:

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

Para ordenar em ordem decrescente, basta adicionar reverse=True:

itens_ordenados_desc = sorted(d.items(), key=lambda x: x[1], reverse=True)

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, você pode ordenar dicionários diretamente e manter a ordem. 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 em ordem crescente ou decrescente, esses métodos ajudarão você a organizar seus dados de dicionário de forma eficiente.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial