Como classificar um dicionário Python por chave ou valor

Neste tutorial, você aprenderá como classificar um dicionário Python por sua chave ou valor.

Quando você está trabalhando com um dicionário em Python, há momentos em que você precisa classificar seu conteúdo – por chave ou por valor. Como um dicionário Python é um mapeamento de valor-chave, você criará um novo dicionário com as chaves ou valores classificados conforme necessário.

Neste tutorial, começaremos revisando os conceitos básicos do dicionário Python. Aprenderemos então a criar um novo dicionário no qual o conteúdo é classificado por chave ou por valor, conforme necessário.

Noções básicas do dicionário Python, revisitadas

O que é um dicionário Python?

Dicionário é uma estrutura de dados embutida em Python. Ele armazena itens como pares de valores-chave. Você pode usar as teclas para procurar os valores correspondentes. Como as chaves identificam exclusivamente os valores, não deve haver repetição de chaves.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

Funcionalmente, um dicionário é semelhante a um mapa de hash. Portanto, não é necessariamente uma estrutura de dados ordenada. Você pode acessar o conteúdo de um dicionário em qualquer ordem arbitrária, desde que conheça as chaves.

Ordenação de itens em um dicionário

Nas versões anteriores do Python, você tinha que usar um OrderedDict para preservar a ordem das chaves. No entanto, a partir do Python 3.7, você pode acessar os itens na mesma ordem em que os adiciona ao dicionário.

Agora que você aprendeu o básico dos dicionários Python, vamos aprender como criar cópias ordenadas do dicionário.

⚙️ Observação: você precisa ter o Python 3.7 ou posterior para que o código deste tutorial funcione conforme o esperado. Você pode baixar o última versão do Pythonou execute os exemplos no Editor Python Online etechpt.com.

  Alerta de golpe: não, o Netflix não está suspendendo sua conta

Como classificar um dicionário Python por chave

Observe a imagem a seguir do menu de sobremesas de um café. Existem duas colunas correspondentes aos itens do menu e seus respectivos preços.

Você pode representar isso na forma de um dicionário Python coletando os nomes dos itens como chaves e seus preços como valores.

Vamos em frente e criar as sobremesas do dicionário, como mostrado abaixo.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Em seguida, vamos criar um dicionário sorted_desserts, onde as sobremesas são organizadas em ordem alfabética. No dicionário de sobremesas original, os nomes das sobremesas são as chaves. Portanto, você deve classificar essas chaves em ordem alfabética para criar um novo dicionário.

Como acessar as chaves de um dicionário Python

Para fazer isso, primeiro pegaremos as chaves do dicionário e depois as classificaremos em ordem alfabética.

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

Vamos chamar o método .keys() no dicionário de sobremesas para recuperar as chaves, conforme mostrado abaixo.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Chamar a função sorted() integrada do Python com uma lista como argumento retorna uma nova lista classificada.

Em seguida, vamos chamar a função sorted() com as chaves de lista como argumento e armazenar a lista ordenada na variável sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Agora que temos as chaves classificadas em ordem alfabética, podemos procurar os valores correspondentes às chaves em sorted_keys no dicionário de sobremesas, conforme mostrado abaixo.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Vamos expandir o bloco de código acima:

  • Inicialize sorted_desserts para ser um dicionário Python vazio.
  • Percorra a lista de chaves sorted_keys.
  • Para cada chave em sorted_keys, adicione uma entrada a sorted_desserts procurando o valor correspondente no dicionário de sobremesas.
  Use um script do Google como uma alternativa de código aberto ao Unroll.me

Usar o loop for como este é considerado verboso. Em Python, há uma alternativa mais concisa usando a compreensão do dicionário.

Compreensão de dicionário em Python

Python suporta o uso de compreensão de dicionário, semelhante à compreensão de lista. A compreensão do dicionário permite criar um novo dicionário Python com apenas uma linha de código.

▶️ Aqui está a construção geral para usar a compreensão do dicionário em Python.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

Vamos usar a segunda construção na célula acima: new_dict = {key:value for key in } para criar um dicionário sorted_desserts.

Neste exemplo:

  • iterável: a lista sorted_keys
  • key: a chave que acessamos percorrendo as sorted_keys
  • value: procure o valor correspondente à chave no dicionário de sobremesas, sobremesas[key]

Juntando tudo, temos a expressão para compreensão do dicionário, conforme mostrado abaixo.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

A partir da saída acima, as sobremesas são organizadas em ordem alfabética no dicionário sorted_desserts.

Como classificar um dicionário Python por valor

A seguir, aprenderemos como classificar um dicionário Python por seus valores.

No dicionário de sobremesas, os valores correspondem aos preços das sobremesas. Você pode classificar o dicionário por preços, em ordem crescente ou decrescente.

▶️ Você pode usar o método de dicionário embutido .items() para obter todos os pares chave-valor. Cada tupla é um par chave-valor.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Cada um dos itens é uma tupla em si. Assim, você também pode indexar em cada par chave-valor para acessar as chaves e os valores individualmente.

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

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

Como classificar os valores de um dicionário Python em ordem crescente

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

  Como listar todos os aplicativos em um Mac

Nota: lambda args: expression é a sintaxe para definir funções lambda em Python.

Neste exemplo de ordenação de sobremesas por preço, temos acesso aos itens do dicionário (pares chave-valor). Vamos definir key = lambda item:item[1] como gostaríamos de classificar pelo valor (preço).

Como a função sorted() retorna uma lista por padrão, você deve convertê-la explicitamente em um dict, conforme mostrado abaixo.

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

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Você também pode reescrever usando compreensão do dicionárioComo discutido anteriormente.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Em sorted_desserts, Cup Cake com preço de $ 2 é o primeiro item e Brownies com preço de $ 12 é o último item.

Como classificar os valores de um dicionário Python em ordem decrescente

Se você quiser ordenar os preços em ordem decrescente, você pode definir o parâmetro opcional reverse como True, conforme explicado abaixo.

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

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Agora, sorted_desserts foi classificado em ordem decrescente de preços, começando com a sobremesa mais cara Brownies custando US $ 12.

Encerrando 👩🏽‍💻

Vamos resumir 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 classificação de um dicionário por chave ou valor, criamos um novo dicionário que é classificado conforme necessário.
  • Você pode usar os métodos de dicionário integrados, .keys() e .items() para recuperar todas as chaves e pares de valores-chave, respectivamente.
  • Você pode usar a função sorted() junto com a chave de parâmetros opcionais e inverter para obter a classificação desejada.

Agora que você aprendeu a classificar um dicionário Python, aprenda a classificar listas Python. Boa codificação!🎉