Trilha de aprendizado · Nível 3 · Tutorial 6

Consultar e atualizar dados com dicionários

Organizar informações por chaves, consultar valores com segurança e percorrer ou atualizar os dados de um dicionário.

  • Nível: Iniciante
  • Duração: 23 min
  • 7 passos
Consultar e atualizar dados com dicionários

O que você vai percorrer

  1. Organizar informações em pares de chave e valor Crie um dicionário de estoque e reconheça como cada chave identifica um valor. 3 min
  2. Consultar pela chave, não pela posição Recupere valores com colchetes e reconheça quando uma consulta gera KeyError. 2 min
  3. Lidar com chaves que podem não existir Escolha entre colchetes, get e in para consultar o estoque e decidir o que fazer quando uma chave estiver ausente. 3 min
  4. Adicionar e atualizar associações Inclua produtos e substitua quantidades por atribuição ou update, acompanhando o estado e a ordem do dicionário. 3 min
  5. Remover associações e recuperar valores Escolha entre del e pop para excluir uma associação e saiba o que acontece quando a chave não existe. 3 min
  6. Percorrer chaves, valores e pares Escolha o percurso adequado para listar produtos, quantidades ou ambos e reconheça quais alterações são seguras durante o laço. 4 min
  7. Aplicação final: consultar e atualizar um estoque Complete um programa no seu computador, escolha as operações de estoque e confira o resultado das suas alterações. 5 min

O que você vai aprender

  • Criar dicionários e escolher chaves simples adequadas aos dados.
  • Distinguir acesso por chave de acesso por posição.
  • Consultar valores com colchetes ou get conforme a possibilidade de ausência da chave.
  • Adicionar, substituir e remover associações.
  • Percorrer chaves, valores e pares, usando desempacotamento quando necessário.

Antes de começar

  • Agrupar e desempacotar valores com tuplas
  • Selecionar caminhos com if, elif e else

Passo 1 de 7

Organizar informações em pares de chave e valor

Crie um dicionário de estoque e reconheça como cada chave identifica um valor.

Um produto, uma quantidade

Organizar por significado

Em um estoque de papelaria, podemos associar o nome de cada produto à sua quantidade. Um dicionário organiza essas associações em pares de chave e valor: o produto é a chave; a quantidade é o valor.

Na escrita do dicionário, usamos {} ao redor dos pares, : entre chave e valor e vírgulas entre os pares. Para criar um dicionário vazio, usamos apenas {}.

Do estoque ao código

python
estoque = {"lápis": 12, "caneta": 8, "borracha": 8}
estoque_vazio = {}

print(estoque)
print(estoque_vazio)

Cada seta representa uma associação

Diagrama com três associações: chave lápis aponta para o valor 12; chave caneta aponta para o valor 8; chave borracha aponta para outro valor 8.

Chaves diferentes podem ter o mesmo valor: caneta e borracha têm quantidade 8.

Reconheça as partes

No exemplo estoque = {"lápis": 12, "caneta": 8, "borracha": 8}, relacione cada trecho ao seu papel.

Toque em um item e depois no par correspondente.

Escolha chaves que identifiquem os dados

Chaves simples e únicas

Textos e números podem ser chaves. Nesta papelaria, nomes como "lápis" são úteis; em um estoque organizado por códigos, poderíamos usar 101 como chave. Listas e dicionários não podem ser chaves.

Cada chave aparece apenas uma vez no dicionário resultante. Se você repetir uma chave na criação, prevalece o último valor informado para ela.

Repetir a chave não soma quantidades

Observe o resultado indicado no comentário.

python
estoque = {"lápis": 12, "caneta": 8, "lápis": 5}
print(estoque)
# {'lápis': 5, 'caneta': 8}

Dica

Chave repetida ≠ valor repetido

O segundo par com "lápis" substitui o valor 12 por 5; não cria outro produto nem soma 12 + 5. Já {"lápis": 8, "caneta": 8} mantém os dois pares: os valores podem se repetir.

Monte o estoque correto

Você quer usar os nomes dos produtos como chaves e registrar 8 lápis, 8 canetas e 3 borrachas. Qual dicionário atende a esse objetivo?

Passo 2 de 7

Consultar pela chave, não pela posição

Recupere valores com colchetes e reconheça quando uma consulta gera KeyError.

A chave indica o valor

Use dicionario[chave] para recuperar o valor associado à chave. Diferentemente de uma sequência, o que vai entre colchetes é a chave, não um índice.

O dicionário preserva a ordem de inserção das associações, mas isso não dá acesso por posição.

Consultando o estoque

python
estoque = {"caneta": 12, "borracha": 0, "caderno": 5}

print(estoque["caderno"])  # 5
Três associações na ordem de inserção: caneta ligada a 12, borracha ligada a 0 e caderno ligado a 5. A consulta estoque["caderno"] aponta para a chave caderno e depois para o valor 5.

A consulta encontra a chave "caderno", independentemente de ela ser a terceira associação.

Leia a associação

Considere estoque = {"caneta": 12, "borracha": 0, "caderno": 5}. O que print(estoque["borracha"]) exibe?

Número também pode ser chave

Se os produtos forem identificados por códigos numéricos, os números entre colchetes continuam sendo chaves. No exemplo, a chave 0 foi inserida em segundo lugar, mas quantidades[0] busca exatamente essa chave.

Consultas por código

python
quantidades = {10: 8, 0: 3, 20: 5}

print(quantidades[0])   # 3
print(quantidades[10])  # 8

Atenção

Chave ausente gera KeyError

Nesse mesmo dicionário, quantidades[1] gera KeyError: 1: a chave 1 não existe. Ter três associações não torna 1 uma consulta válida. O erro informa a chave que não foi encontrada.

Preveja cada consulta

Para quantidades = {10: 8, 0: 3, 20: 5}, associe cada consulta ao resultado.

Toque em um item e depois no par correspondente.

Passo 3 de 7

Lidar com chaves que podem não existir

Escolha entre colchetes, get e in para consultar o estoque e decidir o que fazer quando uma chave estiver ausente.

Consultar sem exigir a chave

Uma resposta para a ausência

Quando a chave pode estar ausente, use get(chave): ele retorna o valor associado ou None, sem gerar KeyError pela ausência.

Com get(chave, padrao), você escolhe a resposta para uma chave ausente. Esse padrão não substitui um valor existente, mesmo que seja zero. A consulta também não adiciona nenhuma chave ao dicionário.

Zero não é ausência

Observe os resultados indicados nos comentários.

python
estoque = {"caneta": 12, "lapis": 0}

print(estoque.get("caneta"))      # 12
print(estoque.get("borracha"))    # None
print(estoque.get("borracha", 5)) # 5
print(estoque.get("lapis", 5))    # 0
print(estoque)                   # {'caneta': 12, 'lapis': 0}
Comparação: a consulta por lapis encontra a chave e retorna zero; a consulta por borracha não encontra a chave e retorna o padrão 5. O estoque continua com apenas caneta e lapis.

O padrão é uma resposta da consulta, não uma nova associação no estoque.

Prever o resultado de get

O que a consulta muda?

Considere estoque = {"caderno": 0}.

Executamos, nesta ordem:
print(estoque.get("caderno", 8))
print(estoque.get("cola"))

Quais são as saídas e o estado do estoque depois das consultas?

Decidir pela presença da chave

in testa chaves, não valores

Use chave in dicionario quando precisar saber se uma chave existe. O resultado é True ou False e pode orientar um if.

Assim, você distingue um produto cadastrado com quantidade zero de um produto que nem está no estoque.

Cadastrado, mesmo com zero

Neste exemplo, o if entra no primeiro caminho e imprime a quantidade 0.

python
estoque = {"caneta": 12, "lapis": 0}

print("caneta" in estoque) # True: é uma chave
print(12 in estoque)       # False: 12 é um valor, não uma chave

produto = "lapis"
if produto in estoque:
    print(f"Quantidade: {estoque[produto]}")
else:
    print("Produto não cadastrado")

Dica

Escolha pela intenção

  • Colchetes: obter o valor quando a chave deve existir; a ausência gera KeyError.
  • get: obter o valor ou uma resposta padrão se a chave estiver ausente.
  • in: verificar a existência da chave para decidir uma ação.

Não use if estoque.get(produto) como teste de cadastro: uma quantidade zero também é avaliada como falsa.

Escolher a operação

Qual consulta atende à intenção?

Associe cada situação à expressão mais adequada. Considere que produto guarda o nome procurado.

Toque em um item e depois no par correspondente.

Passo 4 de 7

Adicionar e atualizar associações

Inclua produtos e substitua quantidades por atribuição ou update, acompanhando o estado e a ordem do dicionário.

Uma atribuição, dois efeitos

Use estoque[chave] = valor para alterar o dicionário:

  • Chave nova: inclui uma associação no final da ordem de inserção.
  • Chave existente: substitui o valor, sem duplicar a chave nem mudar sua posição na ordem.

A quantidade atribuída substitui a anterior; ela não é somada automaticamente.

Incluir caderno e atualizar caneta

python
estoque = {"caneta": 12, "lapis": 20, "borracha": 0}

estoque["caderno"] = 5
estoque["caneta"] = 9

print(estoque)
# {'caneta': 9, 'lapis': 20, 'borracha': 0, 'caderno': 5}

Compare antes e depois

Antes: caneta 12, lapis 20, borracha 0. Depois: caneta 9, lapis 20, borracha 0, caderno 5. Caneta mantém seu lugar e caderno é acrescentado no final.

Atualizar preserva o lugar da chave; incluir acrescenta uma nova associação no final.

Qual é o efeito da atribuição?

Relacione operação e efeito

Considere cada operação separadamente, sempre começando com estoque = {"caneta": 12, "lapis": 20, "borracha": 0}. Relacione a atribuição ao efeito.

Toque em um item e depois no par correspondente.

Várias alterações com update

estoque.update(outro_dicionario) inclui e atualiza várias associações de uma vez. Quando uma chave já existe, prevalece o valor recebido. Chaves existentes mantêm sua posição; novas chaves entram no final, na ordem em que são fornecidas.

Alteração e retorno são coisas diferentes

Partindo do resultado das atribuições anteriores:

python
estoque = {"caneta": 9, "lapis": 20, "borracha": 0, "caderno": 5}

retorno_update = estoque.update({"lapis": 18, "regua": 4})

print(estoque)
# {'caneta': 9, 'lapis': 18, 'borracha': 0, 'caderno': 5, 'regua': 4}
print(retorno_update)
# None

Atenção

Não substitua estoque pelo retorno

update modifica o dicionário e retorna None, não o dicionário atualizado. Por isso, não escreva estoque = estoque.update(...): depois da alteração, essa atribuição faz a variável estoque guardar None. Para apenas atualizar, use estoque.update(...).

Preveja o estado e explique o retorno

Um teste independente

python
estoque = {"caneta": 12, "lapis": 20, "borracha": 0}
retorno_update = estoque.update({"lapis": 18, "regua": 4})

print(estoque)
print(retorno_update)

O que cada print exibirá?

Sem executar primeiro:

  1. Escreva as duas saídas, preservando a ordem das chaves.
  2. Explique por que substituir a segunda linha por estoque = estoque.update({"lapis": 18, "regua": 4}) seria incorreto para continuar usando estoque como dicionário.

Se quiser conferir sua previsão, execute o código no Python do seu computador.

Escreva pelo menos 40 caracteres (0/40).

Passo 5 de 7

Remover associações e recuperar valores

Escolha entre del e pop para excluir uma associação e saiba o que acontece quando a chave não existe.

Excluir ou excluir e guardar?

Para retirar um produto do dicionário, remova a associação inteira: chave e valor.

  • Use del estoque[chave] quando quiser apenas excluir. Essa instrução não fornece um valor de retorno.
  • Use estoque.pop(chave) quando quiser excluir e aproveitar o valor removido.

Duas remoções, um estoque restante

python
estoque = {"lapis": 12, "borracha": 5, "caneta": 8}

del estoque["borracha"]
retiradas = estoque.pop("caneta")

print(retiradas)  # 8
print(estoque)    # {'lapis': 12}
O estoque começa com lapis: 12, borracha: 5 e caneta: 8. del remove borracha: 5. pop remove caneta: 8 e envia o valor 8 para retiradas. No estoque, resta apenas lapis: 12.

O retorno de pop é o valor removido, não o dicionário que sobrou.

Separe o retorno do estado final

Preveja as duas saídas

python
estoque = {"caderno": 4, "cola": 3}
quantidade = estoque.pop("caderno")

print(quantidade)
print(estoque)

Sem executar primeiro, escreva o que cada print exibirá. Depois, se quiser conferir, execute o código no seu Python.

Escreva pelo menos 10 caracteres (0/10).

E se a chave estiver ausente?

pop(chave, padrao) remove e retorna o valor se a chave existir. Se ela estiver ausente, retorna o padrão sem alterar o dicionário. Diferentemente de get, pop remove a associação encontrada.

O padrão só vale para a ausência

python
estoque = {"cola": 3}

print(estoque.pop("cola", 0))     # 3: existia e foi removida
print(estoque.pop("tesoura", 0))  # 0: não existia
print(estoque)                    # {}

Atenção

Sem padrão, a ausência gera erro

Se a chave não existir, tanto del estoque["tesoura"] quanto estoque.pop("tesoura") geram KeyError. del não aceita um valor padrão. Se precisar usá-lo quando a chave puder faltar, verifique a presença com in antes.

Escolha pela necessidade

Relacione cada situação à operação mais direta.

Toque em um item e depois no par correspondente.

Passo 6 de 7

Percorrer chaves, valores e pares

Escolha o percurso adequado para listar produtos, quantidades ou ambos e reconheça quais alterações são seguras durante o laço.

O que cada percurso entrega?

Escolha o percurso pelo dado de que você precisa:

  • for produto in estoque: entrega as chaves.
  • for produto in estoque.keys(): também entrega as chaves, de forma explícita.
  • for quantidade in estoque.values(): entrega os valores.
  • for produto, quantidade in estoque.items(): entrega os pares, desempacotados nas duas variáveis.

Todos esses percursos acompanham a ordem de inserção das associações, não a ordem alfabética dos produtos.

Três formas de olhar o mesmo estoque

Para o estoque com caneta: 5 e caderno: 2, o percurso direto ou keys() entrega caneta e caderno; values() entrega 5 e 2; items() entrega os pares caneta, 5 e caderno, 2.

Cada linha preserva a ordem: primeiro a associação de caneta, depois a de caderno.

Chaves ou valores

Os dois primeiros laços exibem os mesmos produtos. O terceiro exibe apenas as quantidades.

python
estoque = {"caneta": 5, "caderno": 2}

for produto in estoque:
    print(produto)
# caneta
# caderno

for produto in estoque.keys():
    print(produto)
# caneta
# caderno

for quantidade in estoque.values():
    print(quantidade)
# 5
# 2

Escolha pelo objetivo

Relacione cada tarefa ao percurso mais direto.

Toque em um item e depois no par correspondente.

Trabalhe com o par sem mudar as chaves

Uma variável para cada parte

Com items(), aplique o desempacotamento que você já conhece: em cada passagem, produto recebe a chave e quantidade recebe o valor correspondente. Não é necessário consultar a chave novamente.

Produto e quantidade juntos

python
estoque = {"caneta": 5, "caderno": 2}

for produto, quantidade in estoque.items():
    print(f"{produto}: {quantidade} unidades")

# Saída:
# caneta: 5 unidades
# caderno: 2 unidades

Atenção

Não adicione nem remova chaves durante o percurso

Alterar o tamanho do dicionário enquanto ele é percorrido pode causar RuntimeError. Faça inclusões e remoções antes ou depois do laço.

Substituir o valor de uma chave existente não muda o tamanho. Por exemplo, dentro do laço acima, estoque[produto] = quantidade + 1 seria uma atualização permitida: a chave já existe.

Complete e confira a segurança

Desempacote o par

Complete a lacuna com as duas variáveis necessárias:

estoque = {"caneta": 5, "caderno": 2}
for ___ in estoque.items():
print(f"{produto}: {quantidade}")

Pode remover agora?

Dentro de for produto in estoque:, é seguro executar del estoque[produto], pois a chave atual já foi lida.

Passo 7 de 7

Aplicação final: consultar e atualizar um estoque

Complete um programa no seu computador, escolha as operações de estoque e confira o resultado das suas alterações.

Implemente as operações no seu Python

Seu desafio

No editor do seu computador, crie um arquivo chamado estoque_final.py e copie o código-base abaixo. Ele já é executável, mas ainda não realiza as operações do desafio. Você vai completar o programa usando o que aprendeu.

Use nomes de produtos como chaves textuais e quantidades inteiras como valores. Neste exercício, escreva lapis e regua sem acento.

Código-base

python
# Substitua o dicionário vazio pelos dados iniciais.
estoque = {}
print("Estoque inicial:", estoque)

# Escreva aqui suas consultas e alterações.

print("Estoque final:")
# Escreva aqui o percurso que apresenta os pares restantes.

Complete nesta ordem

  1. Crie o estoque inicial: caneta com 12, lapis com 20 e borracha com 0, nessa ordem.
  2. Consulte antes de alterar: mostre a quantidade de caneta, que deve existir. Consulte também caderno, usando 0 como resposta caso não esteja cadastrado, sem cadastrá-lo nessa consulta.
  3. Decida pela existência: use um teste de chave com if para mostrar se borracha está cadastrada, mesmo com quantidade zero.
  4. Faça duas atribuições: cadastre caderno com 5 e substitua a quantidade de caneta por 9.
  5. Atualize em conjunto: use update para definir lapis como 18 e incluir regua com 4. Mantenha estoque como dicionário.
  6. Remova e aproveite o valor: retire caderno do cadastro e mostre a quantidade removida, obtida pela própria operação de remoção.
  7. Apresente o restante: percorra os pares com items() e desempacotamento. Mostre uma linha por produto, no formato caneta: 9 unidades.

Dica

Tente antes de conferir

Escreva e execute sua solução antes de avançar. Faça todas as inclusões e remoções antes do percurso final. Se encontrar um erro, confira a chave usada e se alguma atribuição substituiu o dicionário por um valor de retorno.

Confira sua execução

As consultas e a remoção

Compare estes resultados com o que seu programa mostrou; os rótulos das mensagens podem variar:

  • Consulta inicial de caneta: 12.
  • Consulta inicial de caderno: 0, sem incluir a chave.
  • Teste de cadastro de borracha: está cadastrada, apesar da quantidade 0.
  • Quantidade recuperada ao remover caderno: 5.

Se algo divergir, confira também a ordem das operações: as consultas vêm antes das alterações.

Trecho final da saída esperada

A ordem abaixo é a de inserção, não a alfabética.

text
Estoque final:
caneta: 9 unidades
lapis: 18 unidades
borracha: 0 unidades
regua: 4 unidades

Do estado inicial ao estado final

Comparação do estoque: inicialmente caneta 12, lapis 20 e borracha 0; ao final, caneta 9, lapis 18, borracha 0 e regua 4, nessa ordem. Separado do estoque final, caderno 5 representa a associação removida.

Atualizações mantêm a ordem das chaves existentes. A nova chave regua fica no final; caderno já foi removido.

Explique sua solução

O que você implementou e observou?

Depois de executar seu programa, relate:

  1. Os trechos que você escreveu para consultar caderno, incluir e substituir quantidades, atualizar em conjunto, remover recuperando o valor e percorrer os pares.
  2. O estado final observado, na ordem exibida, e a quantidade recuperada na remoção.
  3. Por que sua consulta inicial de caderno era adequada para uma chave ausente e por que borracha foi reconhecida como cadastrada.

Se precisou corrigir algo, conte o que mudou. Não é necessário enviar o arquivo.

Escreva pelo menos 100 caracteres (0/100).

Revisão final

Resumo

Escolha a operação pela intenção

Em Consultar e atualizar dados com dicionários, você trabalhou com estas decisões:

  • Organizar dados em pares chave: valor, com chaves únicas. Textos e números são opções simples de chave; listas e dicionários não são.
  • Consultar por chave, não por posição: colchetes quando a chave deve existir, get para uma resposta padrão e in para decidir pela existência.
  • Incluir ou substituir com atribuição; alterar várias associações com update, sem substituir o dicionário pelo retorno None.
  • Excluir com del ou remover recuperando o valor com pop. Se a chave puder faltar, considerar o padrão de pop ou verificar a presença.
  • Percorrer chaves diretamente ou com keys(), valores com values() e pares com items(), preservando a ordem de inserção e sem adicionar ou remover chaves durante o laço.

Tutorial concluído

Parabéns! Você concluiu: Consultar e atualizar dados com dicionários

Você chegou ao fim! A aplicação final reúne a competência central: escolher operações para consultar e alterar um dicionário, prever o comportamento de chaves ausentes e conferir os pares resultantes.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso