Ordene Dicionários Python: Chaves e Valores (Guia Completo)

Foto do autor

By luis

Neste guia, você aprenderá a organizar um dicionário Python, seja pelas suas chaves ou valores.

Ao trabalhar com dicionários em Python, surge a necessidade de ordenar seus dados, seja com base nas chaves ou nos valores. Como um dicionário é uma estrutura de mapeamento chave-valor, criaremos um novo dicionário com as chaves ou valores organizados da maneira desejada.

Neste tutorial, iniciaremos revisando os conceitos básicos de dicionários em Python. Em seguida, exploraremos como gerar um novo dicionário com seu conteúdo ordenado por chave ou valor, conforme a necessidade.

Revisando os Fundamentos dos Dicionários Python

O que é um Dicionário Python?

Um dicionário é uma estrutura de dados embutida no Python, projetada para armazenar informações em pares chave-valor. As chaves são usadas para acessar os valores correspondentes. Cada chave deve ser única, garantindo que não haja repetição de chaves.

py_dict = {"Python":"legal!","Aprender":True}
py_dict["Python"]
# Saída: legal!

py_dict["Aprender"]
# Saída: True

Um dicionário se assemelha a uma tabela hash. Portanto, não se trata necessariamente de uma estrutura de dados ordenada. Você pode acessar os elementos de um dicionário em qualquer sequência, desde que saiba as chaves.

Ordem dos Itens em um Dicionário

Em versões anteriores do Python, a ordem das chaves era preservada utilizando um OrderedDict. Contudo, a partir do Python 3.7, você pode acessar os elementos na mesma ordem em que foram inseridos no dicionário.

Agora que você já conhece os conceitos básicos dos dicionários Python, vamos aprender como criar cópias ordenadas deles.

⚙️ Nota: Para que o código deste tutorial funcione como esperado, você precisará ter o Python 3.7 ou uma versão mais recente. Você pode obter a versão mais recente do Python ou executar os exemplos no Editor Online Python etechpt.com.

Como Ordenar um Dicionário Python por Chave

Observe a imagem abaixo de um cardápio de sobremesas de um café. Há duas colunas, uma com os nomes dos itens e a outra com seus respectivos preços.

Podemos representar isso como um dicionário Python, onde os nomes das sobremesas são as chaves e seus preços são os valores.

Vamos criar o dicionário de sobremesas como mostrado abaixo:

sobremesas = {
    "Sorvete":10,
    "Brownie":12,
    "Cheesecake":3,
    "Rocambole":5,
    "Biscoitos":4,
    "Cupcake":2
}

Agora, vamos criar um dicionário chamado `sobremesas_ordenadas`, onde as sobremesas estarão em ordem alfabética. No dicionário original, os nomes das sobremesas são as chaves. Portanto, é necessário organizar estas chaves em ordem alfabética para criar um novo dicionário.

Como Acessar as Chaves de um Dicionário Python

Para isso, primeiro obteremos as chaves do dicionário e depois as organizaremos em ordem alfabética.

Em Python, o método embutido `.keys()` é usado para obter uma lista de todas as chaves do dicionário.

Vamos usar o método `.keys()` no dicionário `sobremesas` para obter as chaves, como mostrado abaixo.

chaves = sobremesas.keys()
print(chaves)

#Saída
['Sorvete', 'Brownie', 'Cheesecake', 'Rocambole', 'Biscoitos', 
'Cupcake']

Ao usar a função `sorted()` do Python com uma lista como argumento, ela retornará uma nova lista ordenada.

Em seguida, vamos aplicar a função `sorted()` com a lista de chaves como argumento e armazenar a lista organizada na variável `chaves_ordenadas`.

chaves_ordenadas = sorted(chaves)
print(chaves_ordenadas)

# Saída
['Biscoitos', 'Brownie', 'Cheesecake', 'Cupcake', 'Rocambole', 'Sorvete']

Com as chaves ordenadas alfabeticamente, podemos agora consultar os valores correspondentes no dicionário `sobremesas` usando `chaves_ordenadas`:

sobremesas_ordenadas = {}
for chave in chaves_ordenadas:
  sobremesas_ordenadas[chave] = sobremesas[chave]

print(sobremesas_ordenadas)

# Saída
{'Biscoitos': 4, 'Brownie': 12, 'Cheesecake': 3, 'Cupcake': 2, 
'Rocambole': 5, 'Sorvete': 10}

Vamos detalhar o bloco de código acima:

  • Inicializamos `sobremesas_ordenadas` como um dicionário Python vazio.
  • Iteramos sobre a lista de chaves `chaves_ordenadas`.
  • Para cada chave em `chaves_ordenadas`, adicionamos um item a `sobremesas_ordenadas` consultando o valor correspondente no dicionário `sobremesas`.

Usar um loop `for` desta maneira pode ser considerado verboso. Em Python, há uma maneira mais concisa usando a compreensão de dicionário.

Compreensão de Dicionários em Python

Python oferece suporte à compreensão de dicionário, similar à compreensão de listas. Isso permite criar um novo dicionário em uma única linha de código.

▶️ Veja a estrutura geral para utilizar a compreensão de dicionário em Python:

# 1. Quando você tem chaves e valores em duas listas: lista1, lista2
novo_dicionario = {chave:valor for chave,valor in zip(lista1,lista2)}

# 2. Quando você tem as chaves e pode buscar os valores
novo_dicionario = {chave:valor for chave in <iteravel>}

Vamos usar a segunda estrutura na célula acima: `novo_dicionario = {chave:valor for chave in }` para gerar um dicionário `sobremesas_ordenadas`.

Neste exemplo:

  • `iteravel`: é a lista `chaves_ordenadas`
  • `chave`: é a chave que acessamos ao percorrer `chaves_ordenadas`
  • `valor`: consultamos o valor correspondente à chave no dicionário `sobremesas`, ou seja, `sobremesas[chave]`

Juntando tudo, temos a seguinte expressão de compreensão de dicionário:

sobremesas_ordenadas = {chave:sobremesas[chave] for chave in chaves_ordenadas}
print(sobremesas_ordenadas)

{'Biscoitos': 4, 'Brownie': 12, 'Cheesecake': 3, 'Cupcake': 2, 
'Rocambole': 5, 'Sorvete': 10}

A partir da saída acima, vemos que as sobremesas agora estão organizadas em ordem alfabética no dicionário `sobremesas_ordenadas`.

Como Ordenar um Dicionário Python por Valor

Agora, vamos aprender como organizar um dicionário Python com base em seus valores.

No dicionário de sobremesas, os valores correspondem aos preços das sobremesas. Podemos organizar o dicionário com base nos preços, seja em ordem crescente ou decrescente.

▶️ O método de dicionário embutido `.items()` retorna todos os pares chave-valor. Cada par chave-valor é representado como uma tupla.

sobremesas.items()

dict_items([('Sorvete', 10), ('Brownie', 12), ('Cheesecake', 3), 
('Rocambole', 5), ('Biscoitos', 4), ('Cupcake', 2)])

Cada item é uma tupla em si. Podemos usar índices para acessar individualmente as chaves e valores dentro de cada par chave-valor.

itens_dict = sobremesas.items()
for item in itens_dict:
  print(f"chave:{item[0]},valor:{item[1]}")

# Saída
chave:Sorvete,valor:10
chave:Brownie,valor:12
chave:Cheesecake,valor:3
chave:Rocambole,valor:5
chave:Biscoitos,valor:4
chave:Cupcake,valor:2

Como queremos classificar por valores, usaremos o método acima para obter o valor no índice 1 de cada par chave-valor.

Como Ordenar os Valores de um Dicionário Python em Ordem Crescente

Dessa vez, utilizaremos a função `sorted()` junto com o parâmetro opcional `key`. O `key` pode ser qualquer função Python, seja uma função interna, uma definida pelo usuário ou até mesmo uma função lambda.

Observação: `lambda args: expressão` é a sintaxe para criar funções lambda em Python.

Neste exemplo de ordenação das sobremesas por preço, temos acesso aos itens do dicionário (pares chave-valor). Definiremos `key = lambda item:item[1]`, já que queremos classificar com base no valor (preço).

Como a função `sorted()` retorna uma lista por padrão, precisamos convertê-la explicitamente em um dicionário, como abaixo:

sobremesas_ordenadas = dict(sorted(sobremesas.items(), key=lambda item:item[1]))
print(sobremesas_ordenadas)

{'Cupcake': 2, 'Cheesecake': 3, 'Biscoitos': 4, 'Rocambole': 5, 
'Sorvete': 10, 'Brownie': 12}

Podemos reescrever usando a compreensão de dicionário, como discutido anteriormente.

sobremesas_ordenadas = {chave:valor for chave, valor in sorted(sobremesas.items(), 
key=lambda item:item[1])}

print(sobremesas_ordenadas)

# Saída
{'Cupcake': 2, 'Cheesecake': 3, 'Biscoitos': 4, 'Rocambole': 5, 
'Sorvete': 10, 'Brownie': 12}

Em `sobremesas_ordenadas`, o Cupcake, com o preço de 2, é o primeiro item e o Brownie, com o preço de 12, é o último item.

Como Ordenar os Valores de um Dicionário Python em Ordem Decrescente

Para organizar os preços em ordem decrescente, você pode usar o parâmetro opcional `reverse` e defini-lo como `True`, conforme explicado abaixo.

sobremesas_ordenadas = dict(sorted(sobremesas.items(), key=lambda item:item[1], 
reverse=True))
print(sobremesas_ordenadas)

# Saída
{'Brownie': 12, 'Sorvete': 10, 'Rocambole': 5, 'Biscoitos': 4, 
'Cheesecake': 3, 'Cupcake': 2}

Agora, `sobremesas_ordenadas` está organizado em ordem decrescente de preços, começando com o Brownie, a sobremesa mais cara, custando 12.

Concluindo 👩🏽‍💻

Vamos recapitular rapidamente tudo o que aprendemos neste tutorial:

  • Um dicionário Python armazena dados em pares chave-valor; as chaves devem ser únicas.
  • No processo de ordenação de um dicionário por chave ou valor, geramos um novo dicionário que é organizado de acordo com a necessidade.
  • Podemos usar os métodos de dicionário embutidos `.keys()` e `.items()` para obter todas as chaves e pares chave-valor, respectivamente.
  • A função `sorted()` com os parâmetros opcionais `key` e `reverse` são utilizados para obter a organização desejada.

Agora que você sabe como organizar um dicionário Python, aprenda a organizar listas em Python. Bom trabalho de programação!🎉