Quais São Algumas Técnicas Comuns para Iterar Sobre um Dicionário?
Você pode iterar sobre um dicionário se precisar acessar e processar seus pares chave-valor. Isso é útil para atualizar seus valores ou aplicar alguma lógica a eles.
Vamos dar uma olhada em algumas das técnicas que você pode usar.
Digamos que temos um dicionário
products que associa cada produto ao seu preço:
products = {
'Laptop': 990,
'Smartphone': 600,
'Tablet': 250,
'Headphones': 70,
}
Se quisermos oferecer um desconto de 20% em todos os nossos produtos, podemos percorrer todos os pares chave-valor e modificar os preços.
Os métodos .values(), .keys() e .items() são essenciais para essas técnicas. Nós os abordamos brevemente em uma lição anterior.
Eles retornam um objeto view com os valores, chaves e pares chave-valor do dicionário. Você pode usar esses objetos de visualização em loops for para iterar sobre os elementos.
Por exemplo, você pode iterar sobre todos os valores do dicionário assim.
Você escreve for, a variável do loop (price neste caso), products.values() para obter todos os valores do dicionário products, dois pontos e então o corpo do loop, onde você pode aplicar qualquer lógica aos valores. Neste caso, estamos imprimindo-os.
A variável do loop assumirá cada um dos valores, um por iteração:
for price in products.values():
print(price)
E aqui está a saída. Como você pode ver, cada valor é impresso no console, um por um:
990
600
250
70
Isso funciona exatamente da mesma forma para .keys() se você precisar iterar sobre as chaves de um dicionário. Você só precisa iterar sobre products.keys() ou products diretamente e atribuir um nome descritivo para a variável do loop:
for product in products.keys():
print(product)
# Or
for product in products:
print(product)
Esta é a saída. Cada chave é impressa no console, uma de cada vez:
Laptop
Smartphone
Tablet
Headphones
E isso funciona exatamente da mesma forma para pares chave-valor se você precisar iterar sobre as chaves e seus valores correspondentes simultaneamente. Você só precisa iterar sobre products.items():
for product in products.items():
print(product)
Esta é a saída. Agora você obtém tuplas individuais com as chaves e seus valores correspondentes:
('Laptop', 990)
('Smartphone', 600)
('Tablet', 250)
('Headphones', 70)
Se você quiser armazenar a chave e o valor em variáveis de loop separadas, basta defini-las e separá-las com uma vírgula. Então, você pode usá-los no corpo do loop.
Aqui, estamos definindo uma variável de loop product e uma variável de loop price. Cada um conterá seu valor correspondente. É importante defini-los em ordem – a chave primeiro e depois o valor:
for product, price in products.items():
print(product, price)
Esta é a saída. Estamos imprimindo-os lado a lado, mas você pode usar esses valores conforme precisar no seu código.
Laptop 990
Smartphone 600
Tablet 250
Headphones 70
Agora que você sabe mais sobre isso, podemos voltar ao nosso exemplo inicial. Se quisermos oferecer um desconto de 20%, multiplicaríamos cada preço por 0.8 e o reatribuiríamos como o valor daquela chave do produto.
Também poderíamos arredondar o resultado para baixo se quisermos trabalhar com inteiros:
products = {
'Laptop': 990,
'Smartphone': 600,
'Tablet': 250,
'Headphones': 70,
}
for product, price in products.items():
products[product] = round(price * 0.8)
print(products)
Então, se imprimirmos o dicionário, obteremos esses pares chave-valor com os preços com desconto:
{
'Laptop': 792,
'Smartphone': 480,
'Tablet': 200,
'Headphones': 56
}
E finalmente, se você precisar iterar sobre os pares chave-valor enquanto mantém o controle de um contador, você pode chamar a função enumerate(). Este contador atua essencialmente como uma espécie de "índice" ou "contagem" para esse elemento dentro do loop.
A função retorna um objeto enumerate, que atribui um inteiro a cada par chave-valor, como um contador. Você pode iniciar o contador a partir de qualquer número, mas por padrão, ele começa em 0.
Aqui, estamos iterando sobre as chaves do dicionário products:
for product in enumerate(products):
print(product)
Mas a função enumerate() também atribui um inteiro a cada chave, então obtemos tuplas com o inteiro e a chave.
Aqui está a saída:
(0, 'Laptop')
(1, 'Smartphone')
(2, 'Tablet')
(3, 'Headphones')
Se precisar, você pode atribuir esses valores a variáveis de loop separadas. Aqui, temos duas variáveis de loop (index e product). Isto é o que você verá e usará comumente quando trabalhar com enumerate():
for index, product in enumerate(products):
print(index, product)
Se você precisar iterar sobre os valores, pode substituir products por products.values():
for price in enumerate(products.values()):
print(price)
A saída terá o índice e o preço em cada tupla:
(0, 990)
(1, 600)
(2, 250)
(3, 70)
Você também pode atribuí-los a variáveis de loop separadas:
for index, price in enumerate(products.values()):
print(index, price)
Esta será a saída. Você pode usá-los conforme precisar no seu código:
0 990
1 600
2 250
3 70
E com products.items(), você pode obter o par chave-valor inteiro além do "index" ou "counter":
for index, product in enumerate(products.items()):
print(index, product)
Neste exemplo, obtemos o índice seguido por uma tupla que contém a chave e o valor do par chave-valor correspondente:
0 ('Laptop', 990)
1 ('Smartphone', 600)
2 ('Tablet', 250)
3 ('Headphones', 70)
Para personalizar o valor inicial da contagem, você pode passar um segundo argumento para enumerate(). Por exemplo, aqui estamos começando a contagem a partir de 1:
for index, product in enumerate(products.items(), 1):
print(index, product)
Você pode ver essa mudança na saída. Agora o primeiro inteiro é 1 em vez de 0:
1 ('Laptop', 990)
2 ('Smartphone', 600)
3 ('Tablet', 250)
4 ('Headphones', 70)
Isso funciona com qualquer variação que vimos até agora. Você só precisa passar o número inicial como o segundo argumento.
Existem muitas técnicas para iterar sobre um dicionário. Estas são algumas formas comuns e você precisará escolher a melhor para o seu projeto.Este módulo não possui perguntas. Marque como concluído.