Pular para o conteúdo

Como iterar por um dicionário em Python?

[

Como iterar através de um dicionário em Python

Introdução aos Dicionários Python

Os dicionários são uma das estruturas de dados mais importantes e úteis incorporadas no Python. Eles estão em 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 através do dicionário em questão. Neste tutorial, você irá aprofundar-se em como iterar através de um dicionário em Python.

Um sólido conhecimento de iteração de dicionários ajudará você a escrever um código melhor e mais robusto. Em sua jornada através da iteração de dicionários, você escreverá vários exemplos que o ajudarão a entender melhor o processo.

Compreendendo como iterar através de um dicionário em Python

Existem várias maneiras de iterar através de um dicionário em Python. Nesta seção, você aprenderá diferentes métodos para fazer isso.

Percorrendo um dicionário diretamente

Uma maneira simples de iterar através de um dicionário é percorrer as chaves do dicionário e acessar os valores correspondentes. Você pode fazer isso usando um loop for da seguinte forma:

my_dict = { "a": 1, "b": 2, "c": 3 }
for key in my_dict:
value = my_dict[key]
print(key, value)

Neste exemplo, o loop for percorre as chaves do dicionário my_dict. Em cada iteração, a chave é armazenada na variável key e o valor correspondente é acessado usando essa chave. O resultado é impresso no console.

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

Outra maneira de iterar através de um dicionário é usando o método .items(). Esse método retorna uma lista de tuplas contendo pares de chave-valor do dicionário. Você pode usar um loop for para percorrer essas tuplas e acessar as chaves e valores individualmente. Veja o exemplo abaixo:

my_dict = { "a": 1, "b": 2, "c": 3 }
for key, value in my_dict.items():
print(key, value)

Neste exemplo, o loop for percorre as tuplas retornadas pelo método .items(). Em cada iteração, a chave é armazenada na variável key e o valor é armazenado na variável value. O resultado é impresso no console.

Iterando pelas chaves do dicionário: O método .keys()

Se você estiver interessado apenas nas chaves do dicionário e não nos valores correspondentes, pode usar o método .keys(). Esse método retorna um objeto de visualização das chaves do dicionário que você pode iterar diretamente. Veja o exemplo abaixo:

my_dict = { "a": 1, "b": 2, "c": 3 }
for key in my_dict.keys():
print(key)

Neste exemplo, o loop for itera diretamente sobre as chaves do dicionário retornadas pelo método .keys(). A chave é acessada diretamente e impressa no console.

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

Se você estiver interessado apenas nos valores do dicionário e não nas chaves, pode usar o método .values(). Esse método retorna um objeto de visualização dos valores do dicionário que você pode iterar diretamente. Veja o exemplo abaixo:

my_dict = { "a": 1, "b": 2, "c": 3 }
for value in my_dict.values():
print(value)

Neste exemplo, o loop for itera diretamente sobre os valores do dicionário retornados pelo método .values(). O valor é acessado diretamente e impresso no console.

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

Ao iterar através de um dicionário em Python, você também pode fazer alterações nos valores do dicionário. No entanto, é importante ter cuidado ao fazer isso, pois pode causar comportamentos inesperados no loop. Recomenda-se evitar a alteração do tamanho do dicionário durante a iteração, pois isso pode levar a saltos de chave ou valores perdidos. Se você precisar modificar um valor do dicionário durante a iteração, convém criar uma cópia do dicionário original e iterar sobre essa cópia.

Removendo itens com segurança de um dicionário durante a iteração

Ao iterar através de um dicionário em Python, você também pode remover itens com segurança usando o método .pop() ou utilizando a declaração del. No entanto, o método .pop() retorna o valor do item removido, o que pode ser útil se você precisar usar esse valor posteriormente. Veja os exemplos abaixo:

my_dict = { "a": 1, "b": 2, "c": 3 }
# Removendo um item com .pop()
value = my_dict.pop("a")
print(value)
# Removendo um item com del
del my_dict["b"]

No primeiro exemplo, o item com a chave "a" é removido do dicionário usando o método .pop(). O valor desse item é armazenado na variável value e é impresso no console.

No segundo exemplo, o item com a chave "b" é removido do dicionário usando a declaração del.

Iterando através de dicionários: exemplos de loops for

Agora que você conhece os conceitos básicos da iteração através de um dicionário em Python, vamos olhar alguns exemplos de loops for que ilustram várias técnicas úteis.

Filtrando itens pelo seu valor

Você pode iterar através de um dicionário e filtrar os itens com base em seu valor. Vamos dar uma olhada em um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
for key, value in my_dict.items():
if value > 1:
print(key, value)

Neste exemplo, o loop for itera sobre as tuplas retornadas pelo método .items(). Em cada iteração, a chave é armazenada na variável key e o valor é armazenado na variável value. Em seguida, é feita uma verificação condicional para determinar se o valor é maior que 1. Se a condição for verdadeira, a chave e o valor são impressos no console.

Executando cálculos com chaves e valores

Além de filtrar itens, você também pode executar cálculos com as chaves e valores de um dicionário durante a iteração. Vamos ver um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
total = 0
for key, value in my_dict.items():
total += value
print(total)

Neste exemplo, o loop for itera sobre as tuplas retornadas pelo método .items(). Em cada iteração, o valor é acessado diretamente e adicionado à variável total. No final do loop, o valor total é impresso no console.

Trocando chaves e valores através da iteração

Às vezes, pode ser útil trocar as chaves e os valores de um dicionário durante a iteração. Vamos dar uma olhada em um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
new_dict = {}
for key, value in my_dict.items():
new_dict[value] = key
print(new_dict)

Neste exemplo, o loop for itera sobre as tuplas retornadas pelo método .items(). Em cada iteração, a chave e o valor são acessados diretamente. No novo dicionário new_dict, a chave e o valor são trocados, ou seja, a chave se torna o valor e o valor se torna a chave. O novo dicionário é impresso no console.

Iterando através de dicionários: exemplos de comprehensions

Outra forma concisa de iterar através de um dicionário em Python é usando comprehensions. Comprehensions permitem criar uma nova estrutura de dados a partir de uma iteração, aplicando filtros e transformações aos elementos. Vamos ver exemplos de comprehensions aplicados a dicionários.

Filtrando itens pelo seu valor: Revisitado

Podemos usar um comprehension para filtrar itens de um dicionário com base em seu valor. Vamos dar uma olhada no exemplo a seguir:

my_dict = { "a": 1, "b": 2, "c": 3 }
filtered_dict = { key: value for key, value in my_dict.items() if value > 1 }
print(filtered_dict)

Neste exemplo, o comprehension itera sobre as tuplas retornadas pelo método .items(). Em cada iteração, a chave e o valor são acessados diretamente. A condição if value > 1 filtra os itens com valor maior que 1. O novo dicionário filtered_dict é criado com as chaves e valores filtrados. O novo dicionário é impresso no console.

Trocando chaves e valores através da iteração: Revisitado

Também podemos usar comprehensions para trocar as chaves e os valores de um dicionário durante a iteração. Vamos dar uma olhada no exemplo a seguir:

my_dict = { "a": 1, "b": 2, "c": 3 }
swapped_dict = { value: key for key, value in my_dict.items() }
print(swapped_dict)

Neste exemplo, o comprehension itera sobre as tuplas retornadas pelo método .items(). Em cada iteração, a chave e o valor são acessados diretamente. No novo dicionário swapped_dict, a chave e o valor são trocados, ou seja, a chave se torna o valor e o valor se torna a chave. O novo dicionário é impresso no console.

Percorrendo um dicionário em ordem classificada e reversa

Em certos casos, pode ser necessário percorrer um dicionário em uma ordem classificada ou reversa. Python oferece funções e métodos integrados que facilitam essa tarefa.

Iterando sobre chaves classificadas

Se você quiser iterar sobre as chaves de um dicionário em ordem classificada, você pode usar a função sorted(). Veja um exemplo:

my_dict = { "b": 2, "a": 1, "c": 3 }
for key in sorted(my_dict.keys()):
print(key)

Neste exemplo, a função sorted() é usada para classificar as chaves do dicionário em ordem alfabética. O loop for itera sobre as chaves classificadas e as imprime no console.

Percorrendo os valores classificados

Se você quiser iterar sobre os valores de um dicionário em ordem classificada, você pode usar a função sorted() em conjunto com o método .values(). Veja um exemplo:

my_dict = { "b": 2, "a": 1, "c": 3 }
for value in sorted(my_dict.values()):
print(value)

Neste exemplo, a função sorted() é usada para classificar os valores do dicionário em ordem crescente. O loop for itera sobre os valores classificados e os imprime no console.

Classificando um dicionário com uma comprehension

Você também pode usar uma comprehension para classificar um dicionário. Veja o exemplo abaixo:

my_dict = { "b": 2, "a": 1, "c": 3 }
sorted_dict = { key: my_dict[key] for key in sorted(my_dict.keys()) }
print(sorted_dict)

Neste exemplo, uma comprehesion é utilizada para criar um novo dicionário, sorted_dict, com as chaves classificadas em ordem alfabética e os valores correspondentes do dicionário original. O novo dicionário é impresso no console.

Iterando através de um dicionário em ordem reversa classificada

Python também fornece uma maneira de iterar através de um dicionário em ordem reversa classificada. Veja o exemplo abaixo:

my_dict = { "b": 2, "a": 1, "c": 3 }
for key in sorted(my_dict.keys(), reverse=True):
print(key)

Neste exemplo, a função sorted() é usada para classificar as chaves do dicionário em ordem alfabética reversa. O parâmetro reverse=True indica que a ordem deve ser reversa. O loop for itera sobre as chaves classificadas reversamente e as imprime no console.

Percorrendo um dicionário em ordem reversa

Se você quiser iterar sobre um dicionário em ordem reversa, sem classificar as chaves, você pode usar o método .reverse(). Veja um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
for key in reversed(my_dict.keys()):
print(key)

Neste exemplo, o método .reverse() é usado para reverter a ordem das chaves do dicionário. O loop for itera sobre as chaves reversas e as imprime no console.

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

Se você precisar iterar sobre um dicionário de forma destrutiva, removendo itens à medida que avança, pode usar o método .popitem(). Esse método remove e retorna um item aleatório do dicionário como uma tupla contendo a chave e o valor correspondentes. Veja um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
while my_dict:
key, value = my_dict.popitem()
print(key, value)

Neste exemplo, o laço while continua até que o dicionário esteja vazio. A cada iteração, o método .popitem() remove um item aleatório do dicionário e retorna a chave e o valor como uma tupla. A tupla é armazenada nas variáveis key e value e é impressa no console.

Usando funções integradas para iterar implicitamente através de dicionários

Python também fornece funções integradas que permitem iterar implicitamente através de dicionários, aplicando transformações ou filtros aos itens. Vamos ver alguns exemplos dessas funções.

Aplicando uma transformação aos itens de um dicionário: map()

Você pode usar a função map() para aplicar uma transformação a cada item de um dicionário. Veja um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
squared_dict = { key: value ** 2 for key, value in map(lambda item: (item[0], item[1]), my_dict.items()) }
print(squared_dict)

Neste exemplo, a função map() é usada em conjunto com uma lambda function para criar uma nova tupla a partir de cada item do dicionário. Essa nova tupla contém a chave (índice 0) e o valor (índice 1) do item. A nova tupla é usada para criar o novo dicionário squared_dict, onde cada valor é elevado ao quadrado. O novo dicionário é impresso no console.

Filtrando itens em um dicionário: filter()

Você pode usar a função filter() para filtrar itens de um dicionário com base em uma condição. Veja um exemplo:

my_dict = { "a": 1, "b": 2, "c": 3 }
filtered_dict = { key: value for key, value in filter(lambda item: item[1] > 1, my_dict.items()) }
print(filtered_dict)

Neste exemplo, a função filter() é usada em conjunto com uma lambda function para filtrar itens do dicionário com base na condição item[1] > 1. Essa condição verifica se o valor (índice 1) do item é maior que 1. O novo dicionário filtered_dict é criado apenas com os itens que atendem à condição e é impresso no console.

Percorrendo múltiplos dicionários como um só

Em Python, você pode percorrer vários dicionários como se fossem um usando as funções ChainMap e chain(). Vamos dar uma olhada em cada uma delas.

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

A função ChainMap permite que você percorra vários dicionários como se fossem um só. Veja um exemplo:

from collections import ChainMap
dict1 = { "a": 1, "b": 2 }
dict2 = { "c": 3, "d": 4 }
chained_dict = ChainMap(dict1, dict2)
for key, value in chained_dict.items():
print(key, value)

Neste exemplo, a função ChainMap é usada para criar um novo dicionário chained_dict que combina os dicionários dict1 e dict2. O loop for itera sobre os itens desse novo dicionário combinado e os imprime no console.

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

A função chain() é usada em conjunto com o operador * para percorrer uma cadeia de dicionários como se fossem um só. Veja um exemplo:

from itertools import chain
dict1 = { "a": 1, "b": 2 }
dict2 = { "c": 3, "d": 4 }
chained_dict = list(chain(dict1, dict2))
for key, value in chained_dict.items():
print(key, value)

Neste exemplo, a função chain() é usada em conjunto com o operador * para criar uma nova lista chained_dict que contém os dicionários dict1 e dict2 combinados. O loop for itera sobre os itens dessa nova lista combinada e os imprime no console.

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

Python 3.5 introduziu o operador de desempacotamento **, que permite mesclar dicionários de forma concisa. Veja um exemplo:

dict1 = { "a": 1, "b": 2 }
dict2 = { "c": 3, "d": 4 }
merged_dict = { **dict1, **dict2 }
print(merged_dict)

Neste exemplo, o operador de desempacotamento ** é usado para mesclar os dicionários dict1 e dict2 em um novo dicionário merged_dict. Os pares chave-valor de cada dicionário são desempacotados e adicionados ao novo dicionário. O novo dicionário é impresso no console.

Conclusão

A iteração através de um dicionário em Python é uma habilidade valiosa que pode ajudar a escrever um código mais eficiente e legível. Neste tutorial, você aprendeu diferentes técnicas para iterar através de um dicionário, desde iterações diretas até o uso de funções integradas e comprehensions. Compreender essas técnicas permitirá que você manipule e processe dados de forma mais eficiente em seus programas Python.

Resumo das principais informações

  • Você pode iterar diretamente sobre as chaves de um dicionário usando um loop for.
  • O método .items() retorna uma lista de tuplas com pares de chave-valor do dicionário, permitindo que você itere sobre eles.
  • O método .keys() retorna um objeto de visualização das chaves do dicionário que pode ser iterado diretamente.
  • O método .values() retorna um objeto de visualização dos valores do dicionário que pode ser iterado diretamente.
  • Você pode alterar valores durante a iteração, mas é recomendável evitar a alteração do tamanho do dicionário.
  • Ao remover itens durante a iteração, use o método .popitem() para remover um item aleatório ou a declaração del para remover um item específico.
  • Utilize comprehensions para filtrar, transformar e trocar chaves e valores durante a iteração.
  • Python oferece funções integradas como filter() e map() para iterar implicitamente através de dicionários.
  • Use as funções ChainMap e chain() para iterar através de múltiplos dicionários como se fossem um só.
  • O operador de desempacotamento ** permite mesclar dicionários concisamente.
  • Tenha cuidado ao iterar através de um dicionário e garantir que seu código seja eficiente e legível.

Esperamos que este tutorial tenha sido útil para você aprender como iterar através de um dicionário em Python e que você possa aplicar esses conhecimentos em seus próprios projetos Python.