Pular para o conteúdo

Como Iterar em um Dicionário Python de Forma Simples?

[

Como Iterar por um Dicionário em Python

Os dicionários são uma das estruturas de dados mais importantes e úteis incorporadas na linguagem Python. Eles estão presentes em todos os lugares e são uma parte fundamental da própria linguagem. No seu código, você usará dicionários para resolver muitos problemas de programação que podem exigir a iteração pelo dicionário em questão. Neste tutorial, você se aprofundará em como iterar por um dicionário em Python.

Um conhecimento sólido da iteração de dicionário ajudará você a escrever um código melhor e mais robusto. Durante a sua jornada pela iteração de dicionário, você escreverá diversos exemplos que o ajudarão a entender e dominar esse conceito.

Começando com Dicionários Python

Antes de começar a aprender como iterar por um dicionário em Python, é importante entender a estrutura e a sintaxe básica de um dicionário. Um dicionário é uma coleção não ordenada de pares chave-valor, onde cada chave é única e associa-se a um valor específico.

Veja um exemplo básico de um dicionário em Python:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}

Nesse exemplo, temos um dicionário chamado frutas que mapeia o nome de algumas frutas para suas respectivas cores. A chave é o nome da fruta e o valor é a cor correspondente.

Agora que você já tem uma noção básica de como os dicionários funcionam, vamos explorar diferentes maneiras de iterar por eles.

Entendendo como Iterar por um Dicionário em Python

Existem várias maneiras diferentes de iterar por um dicionário em Python, cada uma com suas próprias vantagens e usos específicos. Nas seções a seguir, vamos abordar algumas dessas técnicas.

Percorrendo um Dicionário diretamente

Uma maneira simples de iterar por um dicionário em Python é percorrê-lo diretamente usando um loop for. Nesse caso, o loop iterará pelas chaves do dicionário.

Aqui está um exemplo que demonstra essa forma de iteração:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta in frutas:
print(fruta)

Nesse exemplo, o loop imprime cada chave do dicionário frutas. A saída será:

maçã
banana
laranja

Percorrendo os Pares Chave-Valor: O Método .items()

Outra forma comum de iterar por um dicionário é percorrer os pares chave-valor. Para fazer isso, usamos o método .items(), que retorna uma lista de tuplas contendo cada par chave-valor do dicionário.

Veja um exemplo dessa abordagem:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta, cor in frutas.items():
print(fruta, cor)

Nesse exemplo, o loop imprime cada par chave-valor do dicionário frutas. A saída será:

maçã vermelha
banana amarela
laranja laranja

Percorrendo as Chaves do Dicionário: O Método .keys()

Se você estiver interessado apenas nas chaves de um dicionário, pode utilizar o método .keys(), que retorna uma lista com todas as chaves do dicionário.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta in frutas.keys():
print(fruta)

Nesse exemplo, o loop imprime apenas as chaves do dicionário frutas. A saída será a mesma do exemplo anterior:

maçã
banana
laranja

Percorrendo os Valores do Dicionário: O Método .values()

Da mesma forma que é possível percorrer as chaves de um dicionário, também é possível percorrer apenas os valores usando o método .values(), que retorna uma lista com todos os valores do dicionário.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for cor in frutas.values():
print(cor)

Nesse exemplo, o loop imprime apenas os valores do dicionário frutas. A saída será:

vermelha
amarela
laranja

Alterando Valores do Dicionário Durante a Iteração

Em determinados casos, pode ser necessário alterar os valores de um dicionário enquanto o percorremos. No entanto, é importante ter cuidado ao fazer isso, pois pode levar a resultados inesperados.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta, cor in frutas.items():
if cor == "vermelha":
frutas[fruta] = "verde"
print(frutas)

Nesse exemplo, estamos percorrendo o dicionário frutas e alterando o valor da chave “maçã” de “vermelha” para “verde”. No final, imprimimos o dicionário completo para ver as alterações.

A saída será:

{'maçã': 'verde', 'banana': 'amarela', 'laranja': 'laranja'}

Portanto, é possível alterar os valores do dicionário durante a iteração, mas é importante considerar os possíveis efeitos colaterais das modificações.

Removendo Itens de um Dicionário com Segurança Durante a Iteração

Outra situação comum ao iterar por um dicionário é remover itens do mesmo durante o processo. No entanto, fazer isso diretamente pode causar erros e comportamentos inesperados.

Para remover itens de um dicionário de forma segura durante a iteração, podemos utilizar o método .copy() para criar uma cópia temporária do dicionário. Em seguida, aplicamos as modificações na cópia e as refletimos no dicionário original.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta, cor in frutas.copy().items():
if cor == "vermelha":
del frutas[fruta]
print(frutas)

Nesse exemplo, removemos todas as frutas de cor “vermelha” do dicionário frutas. Para fazer isso com segurança, criamos uma cópia temporária do dicionário original usando o método .copy(). Em seguida, percorremos a cópia e removemos os itens correspondentes do dicionário original.

A saída será:

{'banana': 'amarela', 'laranja': 'laranja'}

Iterando por Dicionários: Exemplos de Loops for

Além das técnicas mencionadas anteriormente, os loops for podem ser utilizados de maneiras mais específicas para se iterar por dicionários. Nas seções a seguir, vamos abordar alguns exemplos de loops for com dicionários.

Filtrando Itens pelo Valor

Em alguns casos, pode ser necessário filtrar os itens de um dicionário com base no seu valor. Podemos fazer isso utilizando um loop for e uma estrutura condicional.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
frutas_vermelhas = {
fruta: cor for fruta, cor in frutas.items() if cor == "vermelha"
}
print(frutas_vermelhas)

Nesse exemplo, filtramos apenas as frutas de cor “vermelha” do dicionário frutas e criamos um novo dicionário chamado frutas_vermelhas contendo apenas essas frutas.

A saída será:

{'maçã': 'vermelha'}

Realizando Cálculos com Chaves e Valores

Os loops for também podem ser utilizados para realizar cálculos com as chaves e valores de um dicionário. Podemos utilizar os valores do dicionário para calcular um resultado específico e armazená-lo em uma variável.

Veja um exemplo:

precos = {
"maçã": 2.5,
"banana": 1.5,
"laranja": 3.0
}
total = 0
for fruta, preco in precos.items():
total += preco
print(total)

Nesse exemplo, estamos calculando o valor total das frutas representadas pelo dicionário precos. Ao percorrer o dicionário, somamos os preços das frutas à variável total.

A saída será:

7.0

Trocando Chaves e Valores Durante a Iteração

Por fim, podemos utilizar um loop for para trocar as chaves pelos valores e os valores pelas chaves de um dicionário.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
cores_frutas = {
cor: fruta for fruta, cor in frutas.items()
}
print(cores_frutas)

Nesse exemplo, criamos um novo dicionário chamado cores_frutas que mapeia as cores das frutas para seus respectivos nomes. Ao percorrer o dicionário frutas, trocamos as chaves pelos valores e vice-versa.

A saída será:

{'vermelha': 'maçã', 'amarela': 'banana', 'laranja': 'laranja'}

Iterando por Dicionários: Exemplos de Compreensões

Outra forma mais concisa de iterar por dicionários em Python é utilizando as chamadas compreensões de dicionário. As compreensões são uma maneira de criar dicionários (ou outras estruturas de dados) com base em uma expressão concisa e em uma estrutura for ou if.

Nas seções a seguir, vamos ver alguns exemplos de compreensões de dicionário aplicadas à iteração por dicionários.

Filtrando Itens pelo Valor: Revisitado

Podemos utilizar as compreensões de dicionário para filtrar os itens de um dicionário com base no seu valor de forma mais concisa.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
frutas_vermelhas = {fruta: cor for fruta, cor in frutas.items() if cor == "vermelha"}
print(frutas_vermelhas)

Nesse exemplo, utilizamos uma compreensão de dicionário para criar um novo dicionário chamado frutas_vermelhas que contém apenas as frutas de cor “vermelha” do dicionário frutas.

A saída será a mesma do exemplo anterior:

{'maçã': 'vermelha'}

Trocando Chaves e Valores Durante a Iteração: Revisitado

Da mesma forma que fizemos com a iteração tradicional, podemos utilizar compreensões de dicionário para trocar as chaves pelos valores e os valores pelas chaves.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
cores_frutas = {cor: fruta for fruta, cor in frutas.items()}
print(cores_frutas)

Nesse exemplo, a compreensão de dicionário cria um novo dicionário chamado cores_frutas que mapeia as cores das frutas para seus respectivos nomes invertidos. As chaves e os valores são trocados durante a iteração.

A saída será a mesma do exemplo anterior:

{'vermelha': 'maçã', 'amarela': 'banana', 'laranja': 'laranja'}

Trabalhando com Ordem Classificada e Ordem Reversa

Em Python, os dicionários não são ordenados, o que significa que não há garantia de que a iteração por eles manterá uma ordem específica. No entanto, às vezes é necessário percorrer um dicionário em uma ordem classificada ou em ordem reversa.

Nas seções a seguir, mostraremos como fazer iterações ordenadas e em ordem reversa.

Percorrendo as Chaves em Ordem Ordenada

Podemos percorrer as chaves de um dicionário em ordem ordenada utilizando a função sorted() para classificar as chaves antes de iterar por elas.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta in sorted(frutas.keys()):
print(fruta)

Nesse exemplo, utilizamos a função sorted() para classificar as chaves do dicionário frutas antes de iterar por elas. Isso nos permite percorrer as chaves na ordem “banana”, “laranja”, “maçã”.

A saída será:

banana
laranja
maçã

Percorrendo os Valores em Ordem Ordenada

Da mesma forma que fizemos com as chaves, podemos percorrer os valores de um dicionário em ordem ordenada utilizando a função sorted().

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for cor in sorted(frutas.values()):
print(cor)

Nesse exemplo, utilizamos a função sorted() para classificar os valores do dicionário frutas antes de iterar por eles. Isso nos permite percorrer os valores na ordem “amarela”, “laranja”, “vermelha”.

A saída será:

amarela
laranja
vermelha

Classificando um Dicionário com uma Compreensão

Podemos utilizar uma compreensão de dicionário para criar um novo dicionário classificado com base nos valores de um dicionário original.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
frutas_classificadas = {fruta: cor for fruta, cor in sorted(frutas.items(), key=lambda x: x[1])}
print(frutas_classificadas)

Nesse exemplo, utilizamos uma compreensão de dicionário para criar um novo dicionário chamado frutas_classificadas. Esse dicionário é uma versão classificada do dicionário frutas, onde as frutas são classificadas com base em suas cores.

A saída será:

{'banana': 'amarela', 'laranja': 'laranja', 'maçã': 'vermelha'}

Percorrendo um Dicionário em Ordem Reversa

Se você precisar percorrer um dicionário em ordem reversa, pode utilizar a função reversed() para inverter a ordem das chaves do dicionário antes de iterar por elas.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta in reversed(frutas.keys()):
print(fruta)

Nesse exemplo, utilizamos a função reversed() para inverter a ordem das chaves do dicionário frutas antes de iterar por elas. Isso nos permite percorrer as chaves na ordem “laranja”, “banana”, “maçã”.

A saída será:

laranja
banana
maçã

Percorrendo um Dicionário em Ordem Reversa Classificada

Podemos combinar as técnicas mencionadas anteriormente para percorrer um dicionário em ordem reversa e classificada. Nesse caso, utilizamos a função reversed() e a função sorted() em conjunto.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
for fruta in reversed(sorted(frutas.keys())):
print(fruta)

Nesse exemplo, utilizamos a função sorted() para classificar as chaves do dicionário frutas antes de inverter a ordem utilizando reversed(). Isso nos permite percorrer as chaves na ordem reversa classificada.

A saída será:

maçã
laranja
banana

Iterando por um Dicionário Destrutivamente com o Método .popitem()

Podemos utilizar o método .popitem() para percorrer um dicionário de forma destrutiva, ou seja, removendo os itens do dicionário durante a iteração.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
while frutas:
fruta, cor = frutas.popitem()
print(fruta, cor)

Nesse exemplo, utilizamos um loop while para percorrer o dicionário frutas até que ele esteja vazio. A cada iteração, utilizamos o método .popitem() para remover um item aleatório do dicionário e atribuir suas chaves e valores às variáveis fruta e cor, respectivamente.

A saída será:

maçã vermelha
banana amarela
laranja laranja

Utilizando Funções Embutidas para Iterar de Forma Implícita por Dicionários

Além dos loops for, existem algumas funções embutidas em Python que permitem a iteração implícita por dicionários. Duas delas são as funções map() e filter().

Aplicando Uma Transformação nos Itens de um Dicionário: map()

A função map() pode ser utilizada para aplicar uma transformação nos itens de um dicionário. Ela recebe uma função e um iterável, como um dicionário, e retorna um iterador contendo o resultado da aplicação da função a cada item do dicionário.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
frutas_em_maiusculo = dict(map(lambda item: (item[0], item[1].upper()), frutas.items()))
print(frutas_em_maiusculo)

Nesse exemplo, estamos utilizando a função map() para aplicar a função lambda item: (item[0], item[1].upper()) a cada item do dicionário frutas. Essa função retorna uma tupla contendo a chave e o valor do item, onde o valor é convertido para maiúsculas.

A saída será:

{'maçã': 'VERMELHA', 'banana': 'AMARELA', 'laranja': 'LARANJA'}

Filtrando Itens de Um Dicionário: filter()

A função filter() pode ser utilizada para filtrar os itens de um dicionário com base em uma condição. Ela recebe uma função de filtro e um iterável, como um dicionário, e retorna um iterador contendo apenas os itens que satisfazem a condição.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela",
"laranja": "laranja"
}
frutas_vermelhas = dict(filter(lambda item: item[1] == "vermelha", frutas.items()))
print(frutas_vermelhas)

Nesse exemplo, estamos utilizando a função filter() para filtrar apenas os itens do dicionário frutas que possuem o valor “vermelha”. Essa função recebe a função de filtro lambda item: item[1] == "vermelha" que verifica se o valor do item é igual a “vermelha”.

A saída será:

{'maçã': 'vermelha'}

Percorrendo Múltiplos Dicionários Como Um Só

As bibliotecas Python oferecem várias maneiras de percorrer múltiplos dicionários como se fossem um só. Duas dessas maneiras são utilizando as classes ChainMap e chain() do módulo itertools.

Percorrendo Múltiplos Dicionários com ChainMap

A classe ChainMap permite combinar vários dicionários em uma única estrutura de dados. Ela cria uma cadeia de mapeamentos, onde a pesquisa por uma chave em um dicionário é feita sequencialmente em todos os dicionários encadeados.

Veja um exemplo:

from collections import ChainMap
frutas = {
"maçã": "vermelha",
"banana": "amarela"
}
legumes = {
"cenoura": "laranja",
"abóbora": "verde"
}
alimentos = {
"arroz": "branco",
"macarrão": "amarelo"
}
todos_os_alimentos = ChainMap(frutas, legumes, alimentos)
for alimento, cor in todos_os_alimentos.items():
print(alimento, cor)

Nesse exemplo, utilizamos a classe ChainMap para criar uma cadeia de mapeamentos contendo os dicionários frutas, legumes e alimentos. Em seguida, percorremos a cadeia utilizando um loop for para imprimir todos os alimentos e suas cores.

A saída será:

maçã vermelha
banana amarela
cenoura laranja
abóbora verde
arroz branco
macarrão amarelo

Percorrendo Múltiplos Dicionários com chain()

A função chain() do módulo itertools também pode ser utilizada para percorrer múltiplos dicionários como se fossem um só. Ela recebe dois ou mais iteráveis como argumentos e retorna um iterador que percorre os elementos de cada iterável em sequência.

Veja um exemplo:

from itertools import chain
frutas = {
"maçã": "vermelha",
"banana": "amarela"
}
legumes = {
"cenoura": "laranja",
"abóbora": "verde"
}
alimentos = {
"arroz": "branco",
"macarrão": "amarelo"
}
for alimento, cor in chain(frutas.items(), legumes.items(), alimentos.items()):
print(alimento, cor)

Nesse exemplo, utilizamos a função chain() para criar um iterador que percorre os itens dos dicionários frutas, legumes e alimentos. Em seguida, utilizamos um loop for para imprimir os alimentos e suas cores.

A saída será a mesma do exemplo anterior:

maçã vermelha
banana amarela
cenoura laranja
abóbora verde
arroz branco
macarrão amarelo

Percorrendo Dicionários Mesclados: O Operador de Desempacotamento (**)

O operador de desempacotamento (**), também conhecido como desempacotador, pode ser utilizado para percorrer dicionários mesclados.

Veja um exemplo:

frutas = {
"maçã": "vermelha",
"banana": "amarela"
}
outros_frutas = {
"laranja": "laranja",
"abacaxi": "amarelo"
}
todos_os_frutas = {**frutas, **outros_frutas}
for fruta, cor in todos_os_frutas.items():
print(fruta, cor)

Nesse exemplo, utilizamos o operador de desempacotamento (** frutas, ** outros_frutas) para criar um novo dicionário chamado todos_os_frutas, que contém todas as frutas dos dicionários frutas e outros_frutas. Em seguida, percorremos o novo dicionário com um loop for para imprimir todas as frutas e suas cores.

A saída será:

maçã vermelha
banana amarela
laranja laranja
abacaxi amarelo

Principais Conclusões

A iteração por dicionários é uma habilidade fundamental para qualquer programador Python. Neste tutorial, você aprendeu várias técnicas e métodos para iterar por um dicionário de forma eficiente e segura.

Aqui estão alguns pontos principais a levar em consideração:

  • Você pode percorrer um dicionário diretamente usando um loop for.

  • O método .items() permite percorrer pares chave-valor de um dicionário.

  • O método .keys() permite percorrer apenas as chaves de um dicionário.

  • O método .values() permite percorrer apenas os valores de um dicionário.

  • É possível alterar valores de um dicionário durante a iteração, mas é importante tomar cuidado com os possíveis efeitos colaterais.

  • Utilize o método .copy() para remover itens de um dicionário de forma segura durante a iteração.

  • A utilização de compreensões de dicionário pode tornar a iteração por um dicionário mais concisa e elegante.

  • Utilize as funções embutidas map() e filter() para iterar por um dicionário de forma implícita.

  • As classes ChainMap e chain() permitem percorrer múltiplos dicionários como se fossem um só.

  • O operador de desempacotamento (**) pode ser utilizado para percorrer dicionários mesclados.

Agora que você aprendeu essas técnicas de iteração por dicionários em Python, você estará preparado para resolver diversos problemas de programação de forma eficiente e elegante.