Pular para o conteúdo

Como Iterar Sobre um Dicionário no Python

CodeMDD.io

Como iterar em um dicionário em Python

Os dicionários são uma das estruturas de dados mais importantes e úteis incorporadas ao Python. Eles estão por toda parte 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ê mergulhará profundamente em como iterar em um dicionário em Python.

Ter um conhecimento sólido sobre a iteração de dicionários ajudará você a escrever um código melhor e mais robusto. Em sua jornada pela iteração de dicionários, você escreverá vários exemplos que ajudarão a ilustrar cada conceito e garantirão que você esteja preparado para aproveitar ao máximo as capacidades dos dicionários em Python.

Começando com dicionários em Python

Antes de aprender a iterar em um dicionário em Python, é importante ter uma compreensão básica dos dicionários e de como eles são estruturados.

Um dicionário é uma coleção não ordenada de pares chave-valor, em que cada elemento é identificado por uma chave única. As chaves são usadas para acessar os valores associados a elas. Os dicionários são declarados usando chaves {} e os pares chave-valor são separados por dois pontos :. Veja um exemplo simples de um dicionário em Python:

my_dict = {"chave1": "valor1", "chave2": "valor2", "chave3": "valor3"}

Neste exemplo, "chave1", "chave2" e "chave3" são as chaves do dicionário e "valor1", "valor2" e "valor3" são os valores associados a essas chaves, respectivamente.

Agora que você tem uma compreensão básica dos dicionários em Python, vamos ver como iterar por eles.

Entendendo como iterar por um dicionário em Python

Existem várias maneiras de iterar por um dicionário em Python, dependendo do que você deseja fazer. As seções a seguir explicarão cada uma delas e fornecerão exemplos detalhados e executáveis de código.

Percorrendo um dicionário diretamente

Uma maneira simples de iterar por um dicionário em Python é percorrer diretamente suas chaves. Para fazer isso, podemos usar um loop for para iterar pelas chaves e imprimir seus valores correspondentes. Veja o exemplo abaixo:

animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for animal in animais:
som = animais[animal]
print(f"O som do {animal} é {som}")

Neste exemplo, o loop for itera pelas chaves do dicionário animais. Dentro do loop, a variável animal assume o valor de cada chave do dicionário em cada iteração. O valor correspondente a essa chave é acessado usando a sintaxe de indexação animais[animal].

A saída do exemplo será:

O som do cachorro é woof
O som do gato é meow
O som do passarinho é tweet

Iterando sobre os itens do dicionário: O método .items()

Outra maneira comum de iterar por um dicionário em Python é usando o método .items(). Esse método retorna uma visualização de objetos de pares chave-valor do dicionário, permitindo que você itere por eles facilmente.

Vamos usar o mesmo dicionário de animais do exemplo anterior:

animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for animal, som in animais.items():
print(f"O som do {animal} é {som}")

Neste exemplo, o método .items() é chamado no dicionário animais, retornando uma visualização dos pares chave-valor. Em cada iteração do loop for, a variável animal recebe o valor da chave e a variável som recebe o valor correspondente. Isso permite que você faça referência fácil aos valores-chave durante a iteração.

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

O som do cachorro é woof
O som do gato é meow
O som do passarinho é tweet

Percorrendo as chaves do dicionário: O método .keys()

Se você estiver interessado apenas nas chaves de um dicionário e não nos valores, pode usar o método .keys(). Esse método retorna uma visualização de objetos que representam todas as chaves do dicionário.

Aqui está um exemplo que ilustra como percorrer as chaves de um dicionário usando o método .keys():

animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for animal in animais.keys():
print(f"Animal encontrado: {animal}")

Neste exemplo, o método .keys() é chamado no dicionário animais, retornando uma visualização dos objetos que representam suas chaves. O loop for itera sobre esses objetos, permitindo que você trabalhe especificamente com as chaves do dicionário.

A saída do exemplo será:

Animal encontrado: cachorro
Animal encontrado: gato
Animal encontrado: passarinho

Essa é uma forma útil de iteração se você precisar realizar alguma tarefa específica com as chaves de um dicionário.

Percorrendo os valores do dicionário: O método .values()

Da mesma forma que podemos percorrer as chaves de um dicionário, também podemos percorrer os valores correspondentes usando o método .values(). Esse método retorna uma visualização de objetos que representam todos os valores do dicionário.

Veja o exemplo a seguir para entender como percorrer os valores de um dicionário usando o método .values():

animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for som in animais.values():
print(f"Som encontrado: {som}")

Neste exemplo, o método .values() é chamado no dicionário animais, retornando uma visualização dos objetos que representam seus valores. O loop for itera sobre esses objetos, permitindo que você trabalhe especificamente com os valores correspondentes do dicionário.

A saída do exemplo será:

Som encontrado: woof
Som encontrado: meow
Som encontrado: tweet

Essa forma de iteração é útil quando você precisa fazer alguma manipulação dos valores de um dicionário.

Essas são apenas algumas das maneiras de iterar em um dicionário em Python. Continue lendo para aprender mais exemplos e técnicas avançadas de iteração em dicionários.

Alterando os valores do dicionário durante a iteração

Ao iterar em um dicionário em Python, é importante entender como as alterações afetam o dicionário. Se você fizer alterações nos valores ou nas chaves do dicionário durante a iteração, isso pode levar a resultados inesperados ou até mesmo a erros.

Vamos ver um exemplo que ilustra como é arriscado alterar os valores de um dicionário durante a iteração:

animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for animal, som in animais.items():
if animal == "gato":
del animais[animal]
print(f"O som do {animal} é {som}")

Neste exemplo, estamos iterando em animais e deletando o valor do “gato” se encontrarmos essa chave. No entanto, ao tentar exibir o valor do “gato” na próxima iteração, ocorrerá um erro porque a chave já foi removida. A saída do exemplo será:

O som do cachorro é woof
Traceback (most recent call last):
File "main.py", line 8, in <module>
print(f"O som do {animal} é {som}")
KeyError: 'gato'

Portanto, sempre tome cuidado ao modificar dicionários durante a iteração para evitar efeitos colaterais indesejados ou erros.

Removendo itens de forma segura de um dicionário durante a iteração

Para remover itens de um dicionário de forma segura durante a iteração, é recomendável criar uma cópia dos itens do dicionário antes de iterar por eles. Isso pode ser feito usando o método copy() para criar uma cópia superficial ou o módulo copy para criar uma cópia profunda do dicionário.

Veja um exemplo que ilustra como remover itens de um dicionário de forma segura durante a iteração:

import copy
animais = {"cachorro": "woof", "gato": "meow", "passarinho": "tweet"}
for animal, som in copy.deepcopy(animais).items():
if animal == "gato":
del animais[animal]
print(f"O som do {animal} é {som}")

Neste exemplo, estamos criando uma cópia profunda do dicionário animais usando copy.deepcopy() antes de iterar pelos itens. Dessa forma, podemos remover itens do dicionário original sem afetar a iteração em si.

A saída do exemplo será:

O som do cachorro é woof
O som do gato é meow
O som do passarinho é tweet

Ao usar esse método de cópia antes de modificar um dicionário, você garantirá que a iteração ocorra sem problemas e que todos os itens desejados sejam processados corretamente.

Exemplos de iteração em dicionários usando o loop for

Agora que você entende as noções básicas de iteração em dicionários e sabe como fazê-lo com segurança, vamos explorar mais alguns exemplos de iteração usando o loop for.

Filtrando itens pelo seu valor

Um cenário comum em que você pode querer iterar por um dicionário é filtrar itens com base em seus valores. Veja um exemplo que demonstra como fazer isso:

notas = {"Ana": 85, "João": 70, "Maria": 95, "Carlos": 80}
aprovados = {}
for aluno, nota in notas.items():
if nota >= 75:
aprovados[aluno] = nota
print(aprovados)

Neste exemplo, estamos iterando pelos itens do dicionário notas e filtrando apenas os alunos com notas maiores ou iguais a 75. Os alunos aprovados com suas respectivas notas são armazenados em um novo dicionário chamado aprovados. A saída do exemplo será:

{'Ana': 85, 'Maria': 95, 'Carlos': 80}

Esse tipo de iteração pode ser útil para realizar cálculos ou filtrar dados com base em condições específicas.

Executando cálculos com chaves e valores

Além de filtrar itens com base em seus valores, você também pode executar cálculos usando as chaves e os valores de um dicionário durante a iteração. Veja um exemplo que calcula a média das notas de um grupo de alunos:

notas = {"Ana": 85, "João": 70, "Maria": 95, "Carlos": 80}
soma = 0
quantidade = 0
for _, nota in notas.items():
soma += nota
quantidade += 1
media = soma https://codemdd.io/ quantidade
print(f"A média das notas é {media}")

Neste exemplo, estamos iterando pelos valores do dicionário notas e somando-os para calcular a média. A variável soma armazena a soma das notas e a variável quantidade registra o número de notas. No final, a média é calculada dividindo a soma pelo número de notas e é exibida na tela. A saída do exemplo será:

A média das notas é 82.5

Esse tipo de iteração é útil quando você precisa realizar cálculos ou agregações usando informações armazenadas em um dicionário.

Trocando chaves e valores durante a iteração

Uma operação comum em dicionários é trocar as chaves pelos valores e vice-versa. Durante a iteração, podemos realizar essa troca facilmente. Veja um exemplo que demonstra como trocar as chaves pelos valores em um dicionário:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "elephant"}
sons = {}
for animal, som in animais.items():
sons[som] = animal
print(sons)

Neste exemplo, estamos iterando pelos itens do dicionário animais e trocando as chaves pelos valores. Os sons dos animais se tornam as chaves do novo dicionário sons, e os animais em si se tornam os valores correspondentes. A saída do exemplo será:

{'woof': 'cachorro', 'meow': 'gato', 'elephant': 'elefante'}

Essa troca de chaves e valores durante a iteração pode ser útil em várias situações, como mapear valores para chaves únicas ou realizar pesquisas em um dicionário usando seus valores.

Esses foram apenas alguns exemplos de iteração em dicionários usando o loop for. Lembre-se de que as possibilidades são praticamente ilimitadas e que você pode adaptar esses conceitos para atender às suas necessidades específicas.

Iterando em dicionários usando compreensão de dicionário

Além do loop for, Python também oferece uma sintaxe chamada compreensão de dicionário, que permite criar dicionários de forma sucinta e elegante a partir de uma iteração. Vamos ver alguns exemplos de como usar a compreensão de dicionário para iterar de maneira eficiente.

Filtrando itens pelo valor: Revisitado

Vamos começar com o exemplo de filtrar itens de um dicionário com base em seus valores, mas desta vez usando a compreensão de dicionário:

notas = {"Ana": 85, "João": 70, "Maria": 95, "Carlos": 80}
aprovados = {aluno: nota for aluno, nota in notas.items() if nota >= 75}
print(aprovados)

Neste exemplo, estamos criando um novo dicionário chamado aprovados usando a compreensão de dicionário. A compreensão define as chaves e valores do novo dicionário com base nos itens do dicionário notas, filtrando apenas os itens em que a nota é maior ou igual a 75. A saída será a mesma do exemplo anterior:

{'Ana': 85, 'Maria': 95, 'Carlos': 80}

Usar a compreensão de dicionário nesse tipo de iteração pode reduzir a quantidade de código necessário e tornar seu código mais legível.

Trocando chaves pelos valores durante a iteração: Revisitado

Da mesma forma que já fizemos com o loop for, também podemos trocar as chaves pelos valores de um dicionário durante a iteração usando a compreensão de dicionário. Veja um exemplo:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "elephant"}
sons = {som: animal for animal, som in animais.items()}
print(sons)

Neste exemplo, estamos criando um novo dicionário chamado sons usando a compreensão de dicionário. Durante a iteração do dicionário animais, as chaves se tornam os valores precedidos por animal e os valores se tornam as chaves precedidas por som. A saída será a mesma do exemplo anterior:

{'woof': 'cachorro', 'meow': 'gato', 'elephant': 'elefante'}

A compreensão de dicionário é uma forma poderosa e concisa de iterar em um dicionário e criar um novo dicionário com base nessa iteração.

Percorrendo um dicionário em ordem classificada e reversa

Em Python, os dicionários são uma estrutura de dados não ordenada por padrão. No entanto, se você precisar iterar por um dicionário em uma determinada ordem, é possível classificar as chaves ou os valores antes de iterar.

Iterando pelas chaves classificadas

Vamos ver um exemplo de como iterar pelas chaves de um dicionário em ordem classificada:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
for animal in sorted(animais.keys()):
print(f"Animal encontrado: {animal}")

Neste exemplo, estamos usando a função sorted() para classificar as chaves do dicionário animais em ordem alfabética. Em seguida, iteramos pelas chaves classificadas usando o loop for. A saída será:

Animal encontrado: cachorro
Animal encontrado: elefante
Animal encontrado: gato

Ao classificar as chaves do dicionário, você pode controlar a ordem em que os itens são iterados.

Iterando pelos valores classificados

Da mesma forma que podemos iterar pelas chaves classificadas, também podemos iterar pelos valores classificados de um dicionário. Veja o exemplo:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
for som in sorted(animais.values()):
print(f"Som encontrado: {som}")

Neste exemplo, usamos a função sorted() novamente, mas desta vez nos valores do dicionário animais. Em seguida, iteramos pelos valores classificados usando o loop for. A saída será:

Som encontrado: meow
Som encontrado: trumpet
Som encontrado: woof

Ao classificar os valores do dicionário, você pode controlar a ordem em que os itens são iterados.

Classificando um dicionário usando a compreensão de dicionário

Além de classificar as chaves ou valores do dicionário diretamente, também é possível usar a compreensão de dicionário para criar um novo dicionário classificado com base na iteração original. Veja um exemplo:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
animais_ordenados = {animal: som for animal, som in sorted(animais.items())}
print(animais_ordenados)

Neste exemplo, estamos usando a compreensão de dicionário para criar um novo dicionário chamado animais_ordenados. A compreensão classifica os itens do dicionário animais por chave e os coloca em ordem crescente. A saída será:

{'cachorro': 'woof', 'elefante': 'trumpet', 'gato': 'meow'}

Agora você possui um novo dicionário que mantém a ordem das chaves do dicionário original.

Percorrendo um dicionário em ordem reversa

Se você precisa iterar em um dicionário em ordem reversa, pode usar o método reversed() e a função sorted() para inverter a ordem dos itens. Veja um exemplo:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
for animal in reversed(sorted(animais.keys())):
print(f"Animal encontrado: {animal}")

Neste exemplo, estamos usando a função sorted() para classificar as chaves em ordem alfabética e a função reversed() para inverter a ordem dessas chaves. Em seguida, iteramos pelas chaves da ordem inversa usando o loop for. A saída será:

Animal encontrado: gato
Animal encontrado: elefante
Animal encontrado: cachorro

Ao usar o método reversed() e a função sorted() em combinação, você pode iterar em um dicionário em ordem reversa.

Percorrendo um dicionário em ordem reversa usando a compreensão de dicionário

Da mesma forma que fizemos com a iteração em ordem normal, também podemos usar a compreensão de dicionário para iterar em ordem reversa. Veja um exemplo:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
animais_invertidos = {animal: som for animal, som in reversed(sorted(animais.items()))}
print(animais_invertidos)

Neste exemplo, estamos usando a compreensão de dicionário para criar um novo dicionário chamado animais_invertidos. A compreensão primeiro classifica os itens do dicionário animais por chave e, em seguida, inverte a ordem de iteração usando a função reversed(). A saída será:

{'gato': 'meow', 'elefante': 'trumpet', 'cachorro': 'woof'}

Assim, você pode criar um novo dicionário em ordem reversa usando a compreensão de dicionário.

Iterando sobre um dicionário destrutivamente com .popitem()

O método .popitem() é usado para remover e retornar um item aleatório (chave-valor) de um dicionário. Ao iterar em um dicionário e usar esse método, é possível destrutivamente retirar um item do dicionário e fazer algo com ele.

Aqui está um exemplo que ilustra como usar .popitem() para iterar sobre um dicionário destrutivamente:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
while animais:
animal, som = animais.popitem()
print(f"Animal encontrado: {animal}, som: {som}")

Neste exemplo, estamos usando um loop while para iterar de forma destrutiva sobre o dicionário animais. Em cada iteração, usamos o método .popitem() para remover um item aleatório do dicionário e receber seus valores nas variáveis animal e som. Em seguida, exibimos esses valores na tela. O loop continua até que todos os itens tenham sido removidos do dicionário.

A saída do exemplo será:

Animal encontrado: elefante, som: trumpet
Animal encontrado: gato, som: meow
Animal encontrado: cachorro, som: woof

O método .popitem() é útil quando você precisa processar itens em um dicionário de forma destrutiva, removendo-os do dicionário um de cada vez.

Usando funções embutidas para iterar implicitamente em dicionários

Além do loop for, da compreensão de dicionário e dos métodos específicos de dicionário, Python também fornece funções embutidas que permitem iterar implicitamente em um dicionário.

Aplicando uma transformação nos itens do dicionário: map()

A função embutida map() permite aplicar uma transformação a cada item de um dicionário e retornar uma nova visualização de objetos com os resultados dessa transformação.

Veja um exemplo que mostra como usar map() para aplicar uma transformação nos valores de um dicionário:

animais = {"cachorro": "woof", "gato": "meow", "elefante": "trumpet"}
animais_upper = map(str.upper, animais.values())
for som in animais_upper:
print(f"Som encontrado em maiúsculas: {som}")

Neste exemplo, estamos usando map() para aplicar o método .upper() a cada valor do dicionário animais. Os resultados dessa transformação são armazenados em uma nova visualização de objetos chamada animais_upper. Em seguida, iteramos pelos valores transformados e exibimos os resultados na tela.

A saída do exemplo será:

Som encontrado em maiúsculas: WOOF
Som encontrado em maiúsculas: MEOW
Som encontrado em maiúsculas: TRUMPET

Usar a função map() é útil quando você precisa realizar uma transformação nos itens de um dicionário e retornar os resultados dessa transformação em uma nova visualização.

Filtrando itens em um dicionário: filter()

A função embutida filter() permite filtrar itens de um dicionário com base em uma função de filtro fornecida. Ela retorna uma nova visualização de objetos contendo apenas os itens que satisfazem a condição de filtro.

Vamos ver um exemplo que usa filter() para filtrar os valores de um dicionário com base em um critério de filtro:

numeros = {"um": 1, "dois": 2, "três": 3, "quatro": 4, "cinco": 5}
numeros_pares = filter(lambda x: x % 2 == 0, numeros.values())
for numero in numeros_pares:
print(f"Número par encontrado: {numero}")

Neste exemplo, estamos usando filter() junto com uma função lambda para filtrar os valores do dicionário numeros e retornar apenas os valores que são pares. Os valores filtrados são armazenados em uma nova visualização de objetos chamada numeros_pares. Em seguida, iteramos pelos valores filtrados e os exibimos na tela.

A saída do exemplo será:

Número par encontrado: 2
Número par encontrado: 4

A função filter() é útil quando você precisa filtrar os itens de um dicionário com base em uma determinada condição.

Essas são apenas algumas das funções embutidas que você pode usar para iterar implicitamente em um dicionário em Python. Pesquise a documentação oficial para conhecer todas as possibilidades que essas funções oferecem.

Percorrendo vários dicionários como um só

Em algumas situações, pode ser necessário percorrer vários dicionários como se fossem um só. Python fornece duas maneiras de realizar essa iteração: usando a classe ChainMap do módulo collections ou usando a função chain() do módulo itertools.

Iterando através de vários dicionários com ChainMap

A classe ChainMap do módulo collections permite combinar vários dicionários em uma única sequência lógica e iterar por eles como se fossem um só.

Aqui está um exemplo que usa ChainMap para percorrer vários dicionários juntos:

from collections import ChainMap
frutas = {"maçã": "vermelha", "banana": "amarela", "laranja": "laranja"}
animais = {"cachorro": "woof", "gato": "meow", "elefante": "grande"}
mapa = ChainMap(frutas, animais)
for chave, valor in mapa.items():
print(f"{chave}: {valor}")

Neste exemplo, estamos usando ChainMap para combinar os dicionários frutas e animais em um único objeto mapa. Depois, podemos iterar pelas chaves e valores do mapa usando o loop for.

A saída do exemplo será:

maçã: vermelha
banana: amarela
laranja: laranja
cachorro: woof
gato: meow
elefante: grande

Com ChainMap, você pode iterar por vários dicionários como se fossem um só, simplificando o processo de iteração e reduzindo a complexidade do código.

Iterando através de uma cadeia de dicionários com chain()

A função chain() do módulo itertools permite combinar vários dicionários em uma única sequência lógica e iterar por eles como se fossem um só.

Veja um exemplo que utiliza chain() para percorrer vários dicionários juntos:

from itertools import chain
frutas = {"maçã": "vermelha", "banana": "amarela", "laranja": "laranja"}
animais = {"cachorro": "woof", "gato": "meow", "elefante": "grande"}
mapa = chain(frutas.items(), animais.items())
for chave, valor in mapa:
print(f"{chave}: {valor}")

Neste exemplo, estamos usando chain() para combinar os itens dos dicionários frutas e animais em um único objeto mapa. Em seguida, podemos iterar pelas chaves e valores do mapa usando o loop for.

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

maçã: vermelha
banana: amarela
laranja: laranja
cachorro: woof
gato: meow
elefante: grande

A função chain() do módulo itertools fornece uma maneira eficiente de percorrer múltiplos dicionários como se fossem um só.

Percorrendo dicionários mesclados: O operador de desempacotamento (**)

Python também fornece uma sintaxe de desempacotamento (**) que permite percorrer dicionários mesclados, que são combinações de vários dicionários em um só.

Veja um exemplo que usa o operador de desempacotamento para iterar por dicionários mesclados:

frutas = {"maçã": "vermelha", "banana": "amarela"}
animais = {"cachorro": "woof", "gato": "meow"}
objetos = {"caneta": "azul", "livro": "grande"}
todos = {**frutas, **animais, **objetos}
for chave, valor in todos.items():
print(f"{chave}: {valor}")

Neste exemplo, estamos mesclando os dicionários frutas, animais e objetos em um único dicionário chamado todos usando o operador de desempacotamento. Podemos então iterar pelas chaves e valores do todos usando o loop for.

A saída do exemplo será:

maçã: vermelha
banana: amarela
cachorro: woof
gato: meow
caneta: azul
livro: grande

O operador de desempacotamento (**) é uma forma conveniente de percorrer dicionários mesclados e nos permite trabalhar com eles como se fossem um só.

Principais pontos

Neste tutorial, você aprendeu várias maneiras de iterar por dicionários em Python, incluindo percorrer diretamente as chaves, usar o método .items() para percorrer os pares chave-valor, usar o método .keys() para percorrer as chaves e usar o método .values() para percorrer os valores. Você também viu mais técnicas avançadas, como alterar os valores durante a iteração, remover itens de forma segura, percorrer em ordem classificada e reversa, usar funções embutidas para iteração implícita, percorrer vários dicionários como um só e desempacotar dicionários mesclados.

Com essas técnicas e conhecimentos, você está preparado para aproveitar ao máximo a iteração em dicionários em Python e escrever código mais eficiente e robusto em suas aplicações. Não tenha medo de explorar ainda mais os dicionários e experimentar diferentes técnicas de iteração para se tornar um programador Python mais habilidoso.