๐Ÿ“’ ๐Ÿ”‘ ๐Ÿ“‡
Capรญtulo 07 ยท Bootcamp programa AI

Dicionรกrios

Hoje vocรช sai de "guardar uma lista de coisas" e entra em "organizar dados de verdade". Vamos aprender chave: valor, listas de dicionรกrios e construir um Sistema de Cadastro completo. Bora! ๐Ÿš€

๐Ÿ“’ dict ๐Ÿ”‘ chave: valor ๐Ÿ“‹ lista de dicts ๐Ÿ† sistema_cadastro ๐Ÿ› KeyError
๐Ÿงฉ
Quiz relembrando โ€” for & lista
Antes de avanรงar, vamos checar o capรญtulo passado

Antes da gente conhecer dicionรกrio, bora dar uma relembrada rรกpida do que jรก sabemos sobre for e lista. Se errar, sem stress โ€” clica de novo. ๐Ÿ˜‰

1๏ธโƒฃ Em uma lista nomes = ["Ana", "Bia", "Caio"], qual o รญndice do "Bia"?
2๏ธโƒฃ O que o for nome in nomes: faz?
3๏ธโƒฃ Como adicionar "Davi" na lista nomes?
๐Ÿ“’
Dicionรกrios โ€” chave: valor
Quando lista nรฃo basta, dicionรกrio resolve
Pensa na agenda do seu celular ๐Ÿ“ฑ

Quando vocรช quer ligar pra Mรฃe, vocรช nรฃo procura "o terceiro nรบmero da lista". Vocรช procura pelo nome "Mรฃe" โ€” e o celular te entrega o nรบmero.

ร‰ isso que um dicionรกrio faz em Python: vocรช guarda uma chave (tipo "Mรฃe") e ela aponta pra um valor (o nรบmero).

Em Python a sintaxe usa chaves { } e dois pontos:

aluno.py Python
1
2
3
4
5
# um dicionรกrio: ficha de um aluno
aluno = {
    "nome":  "Kelson",
    "idade": 33,
    "curso": "Python",
}

Visualmente o aluno รฉ tipo uma ficha cadastral:

aluno
"nome" โ†’ "Kelson"
"idade" โ†’ 33
"curso" โ†’ "Python"
๐Ÿง  Sacou a ideia?

A chave (ร  esquerda) รฉ como a "etiqueta" da gaveta. O valor (ร  direita) รฉ o que tรก guardado lรก dentro. E vocรช acessa pela chave, sem se preocupar com posiรงรฃo/รญndice.

Outras analogias do mundo real:

๐Ÿ“‡
Carteira de identidade: "Nome โ†’ Joรฃo", "RG โ†’ 123โ€ฆ", "Nascimento โ†’ 1990".
๐Ÿ“ฑ
Agenda telefรดnica: "Mรฃe โ†’ 9999-1234", "Pai โ†’ 9999-5678".
๐ŸŽซ
Carteirinha de aluno: "Curso โ†’ Python", "Turma โ†’ A", "Matrรญcula โ†’ 042".
7.0
Bora Codar! โ€” cadastro_dicionario.py
Vamos criar nosso primeiro dicionรกrio juntos
๐ŸŽฏ
Desafio guiado pelo professor
Vamos fazer juntos ยท cadastro_dicionario.py

A gente vai pedir 3 coisas pro usuรกrio e guardar tudo num รบnico dicionรกrio:

cadastro_dicionario.py Python
1
2
3
4
5
6
7
8
9
10
# pede os dados
nome  = input("Nome do aluno: ")
idade = int(input("Idade: "))
curso = input("Curso: ")

# monta o dicionรกrio
aluno = {"nome": nome, "idade": idade, "curso": curso}

# mostra a ficha
print("Cadastro:", aluno)
Run ยท cadastro_dicionario.py
Nome do aluno:
Idade:
Curso:
โœจ
Repare: em vez de 3 variรกveis soltas (nome, idade, curso), a gente tem UM dicionรกrio sรณ que junta tudo. Isso vira nossa "ficha do aluno" โ€” agora o cadastro tรก todo num lugar sรณ.
๐Ÿ”‘
Acessar valores
aluno["chave"] โ€” pegar pelo nome da gaveta

Pra pegar um valor, vocรช usa colchetes com a chave entre aspas:

acesso.py Python
1
2
3
4
5
aluno = {"nome": "Kelson", "idade": 33, "curso": "Python"}

print(aluno["nome"])    # Kelson
print(aluno["idade"])   # 33
print(f"{aluno['nome']} faz {aluno['curso']}!")
Run ยท acesso.py


๐Ÿ“Œ Lembra como era na lista?

Em lista vocรช acessava por nรบmero: nomes[0]. Em dicionรกrio vocรช acessa por nome da chave: aluno["nome"]. Mais legรญvel, mais "humano". ๐Ÿ‘

โœ๏ธ
Atualizar e Adicionar valores
aluno["idade"] = 34 โ€” mesma sintaxe pra editar e pra criar novo

Aqui tem uma sacada legal: a sintaxe pra atualizar um valor e pra adicionar uma chave nova รฉ a mesma:

atualizar.py Python
1
2
3
4
5
6
7
8
9
aluno = {"nome": "Kelson", "idade": 33, "curso": "Python"}

# ATUALIZAR โ€” a chave 'idade' jรก existe, entรฃo sรณ sobrescreve
aluno["idade"] = 34

# ADICIONAR โ€” a chave 'telefone' nรฃo existia, agora existe!
aluno["telefone"] = "99999-1234"

print(aluno)
Run ยท atualizar.py
{'nome': 'Kelson', 'idade': 34, 'curso': 'Python', 'telefone': '99999-1234'}

Visualmente, o dicionรกrio cresce:

aluno (depois)
"nome" โ†’ "Kelson"
"idade" โ†’ 34 โœ๏ธ
"curso" โ†’ "Python"
"telefone" โ†’ "99999-1234" โœจ
๐Ÿ’ก
Regra simples: se a chave jรก existir, o Python atualiza. Se nรฃo existir, ele cria. Sem stress, sem mรฉtodo especial.
7.1
Desafio Individual โ€” atualizar_dados_aluno.py
Agora รฉ com vocรช
๐Ÿ’ช
Desafio Individual
Faรงa sozinho ยท atualizar_dados_aluno.py
๐Ÿ’ก Dica para fazer sozinho

Crie um arquivo atualizar_dados_aluno.py. Comece com um dicionรกrio aluno jรก preenchido (nome, idade, curso).

Mostre o aluno antes da mudanรงa. Depois pergunte ao usuรกrio a nova idade com input() (lembra de int()!) e atualize aluno["idade"].

No final, mostre o aluno depois. Bรดnus: adicione uma chave nova "telefone" tambรฉm โ€” vocรช sabe como!

๐Ÿšจ
PARE! Tente sozinho primeiro. Faz o esforรงo โ€” vocรช tem TUDO que precisa pra resolver. Errar รฉ parte do processo!
๐Ÿ‘€ Sรณ clique aqui DEPOIS de tentar โ€” Ver cรณdigo completo โ–ผ
atualizar_dados_aluno.py Python
1
2
3
4
5
6
7
8
9
10
11
12
# dicionรกrio inicial
aluno = {"nome": "Kelson", "idade": 33, "curso": "Python"}

print("Antes:", aluno)

# pega nova idade e atualiza
nova_idade = int(input("Nova idade do aluno: "))
aluno["idade"] = nova_idade

# adiciona um campo novo
aluno["telefone"] = input("Telefone: ")

print("Depois:", aluno)
โœจ
Reparou? A linha que atualiza a idade e a linha que adiciona o telefone sรฃo idรชnticas em forma: dicionรกrio[chave] = valor. O Python decide se cria ou atualiza olhando se a chave jรก existia.
๐Ÿ“‹
Lista de Dicionรกrios
Vรกrios cadastros, todos juntinhos numa "prateleira"

Um aluno รฉ legal. Mas e se a gente tiver uma turma inteira? A gente coloca vรกrios dicionรกrios dentro de uma lista:

turma.py Python
1
2
3
4
5
6
7
8
9
10
11
12
alunos = []   # lista vazia, vai guardar dicts

alunos.append({"nome": "Ana",    "idade": 22, "curso": "Python"})
alunos.append({"nome": "Bia",    "idade": 25, "curso": "Web"})
alunos.append({"nome": "Caio",   "idade": 30, "curso": "Dados"})

# percorrer com for: cada item da lista รฉ um dicionรกrio
for a in alunos:
    print(f"{a['nome']} ({a['idade']}) โ€” {a['curso']}")
Run ยท turma.py


Visualmente รฉ uma prateleira de fichas:

alunos[0]
"nome"โ†’"Ana"
"idade"โ†’22
"curso"โ†’"Python"
alunos[1]
"nome"โ†’"Bia"
"idade"โ†’25
"curso"โ†’"Web"
alunos[2]
"nome"โ†’"Caio"
"idade"โ†’30
"curso"โ†’"Dados"
๐ŸŽฏ Combinando dois mundos

Lista + dicionรกrio รฉ a estrutura mais usada do Python na vida real. Cada item da lista รฉ uma "ficha completa" (dicionรกrio). Vocรช usa o for pra percorrer e ["chave"] pra ler cada campo.

โš”๏ธ
Lista vs Dicionรกrio
Quando usar cada um

๐Ÿ“‹ Lista โ€” acesso por posiรงรฃo

Pense em uma fila ordenada. Vocรช pega pela posiรงรฃo:

nomes = ["Ana", "Bia", "Caio"] nomes[0] # "Ana" nomes[2] # "Caio"

โœ… Boa quando a ordem importa.

vs

๐Ÿ“’ Dicionรกrio โ€” acesso por chave

Pense em uma ficha. Vocรช pega pelo nome do campo:

aluno = {"nome": "Ana", "idade": 22} aluno["nome"] # "Ana" aluno["idade"] # 22

โœ… Boa quando o significado importa.

๐Ÿค
Plot twist: os dois juntos sรฃo imbatรญveis. alunos = [aluno1, aluno2, aluno3] โ€” lista ordenada de fichas. ร‰ exatamente o que a gente vai usar no Sistema de Cadastro!
7.2
Desafio Individual โ€” cadastro_pet.py
Mesma ideia, agora pros bichinhos
๐Ÿ’ช
Desafio Individual
Faรงa sozinho ยท cadastro_pet.py
๐Ÿ’ก Dica para fazer sozinho

Crie um arquivo cadastro_pet.py. Pergunte ao usuรกrio 3 coisas usando input(): nome do pet, espรฉcie (cachorro, gato, peixeโ€ฆ) e idade (lembra que tem que int()!).

Monte um dicionรกrio pet com as chaves "nome", "especie" e "idade". Depois mostre uma frase tipo: "Rex รฉ um(a) cachorro de 5 anos." usando f-string.

Bem parecido com o cadastro_dicionario.py que a gente fez juntos โ€” sรณ muda o tema. Vocรช consegue!

๐Ÿšจ
PARE! Tente sozinho primeiro. Cria o arquivo, escreve linha por linha. Quem espia antes de tentar perde a maior parte do aprendizado!
๐Ÿ‘€ Sรณ clique aqui DEPOIS de tentar โ€” Ver cรณdigo completo โ–ผ
cadastro_pet.py Python
1
2
3
4
5
6
7
8
9
# pede os dados do pet
nome    = input("Nome do pet: ")
especie = input("Espรฉcie (cachorro, gato, peixe...): ")
idade   = int(input("Idade: "))

# monta o dicionรกrio
pet = {"nome": nome, "especie": especie, "idade": idade}

print(f"{pet['nome']} รฉ um(a) {pet['especie']} de {pet['idade']} anos.")
Run ยท cadastro_pet.py
Nome do pet:
Espรฉcie (cachorro, gato, peixe...):
Idade:
๐Ÿพ
Notou? Foi a mesmรญssima estrutura do cadastro de aluno. Quando vocรช entender que "รฉ sรณ dado mudando, a estrutura รฉ igual", vocรช passou de iniciante pra quase intermediรกrio. ๐Ÿ˜‰
๐Ÿงฉ
Quiz Dicionรกrios
Bora testar o que vocรช aprendeu
1๏ธโƒฃ Em aluno = {"nome": "Ana"}, como pegar o valor "Ana"?
2๏ธโƒฃ Qual o jeito certo de criar um dicionรกrio?
3๏ธโƒฃ O que faz aluno["idade"] = 34 se a chave "idade" jรก existe?
๐Ÿ›
BugZilla apareceu de novo!
Erros clรกssicos de quem tรก comeรงando com dict
๐Ÿ›
BugZilla detectou: KeyError
Quando vocรช pede uma chave que nรฃo existe

Pediu aluno["telefon"] em vez de aluno["telefone"]? O Python nรฃo advinha. Ele lanรงa um KeyError e dรก tchau.

erro_keyerror.py Python
1
2
3
aluno = {"nome": "Kelson", "idade": 33}

print(aluno["telefone"])    # ๐Ÿ’ฅ KeyError: 'telefone'

E tem outro clรกssico: confundir { } (dict) com [ ] (lista). Olha o BugZilla brincando:

erro_chaves.py Python
1
2
3
4
5
# โŒ ERRADO: usa [ ] querendo dicionรกrio
aluno = ["nome": "Ana"]    # SyntaxError!

# โœ… CERTO: dict usa { }
aluno = {"nome": "Ana"}

๐Ÿ›ก๏ธ Como se proteger

๐Ÿ”
Confira a grafia da chave. "nome" != "Nome" != "nome ". Python รฉ literal: maiรบscula, minรบscula e espaรงo importam.
๐Ÿ›Ÿ
Use .get() quando vocรช nรฃo sabe se a chave existe: aluno.get("telefone", "nรฃo cadastrado") โ€” devolve o valor se existir, ou o segundo argumento se nรฃo existir. Sem erro!
๐Ÿ“’
Decora a forma: { } รฉ DICT, [ ] รฉ LISTA. Vรช os colchetes? Sรฃo primos, mas brigam.
๐Ÿ† Desafio Master

Sistema de Cadastro Completo

Chegou a hora. Vocรช vai juntar tudo que aprendeu atรฉ aqui: while, if, for, list, dict, inputโ€ฆ num programa que faz sentido na vida real.

7.3
Desafio MASTER โ€” sistema_cadastro.py
O climax do capรญtulo ยท combina TUDO
๐Ÿ†
Desafio Individual MASTER
Faรงa sozinho ยท sistema_cadastro.py

Vocรช vai construir um menu interativo que cadastra alunos, guarda numa lista de dicionรกrios, lista todos, busca por nome e mostra um total ao sair. Olha como vai ficar:

๐Ÿ’ก Dica para fazer sozinho

Crie um arquivo sistema_cadastro.py. Sua "caixa de ferramentas":

  1. Comece com uma lista vazia alunos = [].
  2. Use um while True: pra ficar mostrando o menu atรฉ o usuรกrio escolher sair (opรงรฃo 0).
  3. Dentro do loop, mostre o menu com print() e leia a opรงรฃo com input().
  4. Use if/elif/else pra cada opรงรฃo:
    • 1: peรงa nome, idade (com int()) e curso, monte um dict e use alunos.append({...}).
    • 2: use for a in alunos e mostre a["nome"], a["idade"], a["curso"].
    • 3: peรงa um nome, dรช outro for e compare com a["nome"] == nome_busca.
    • 0: mostre o total (len(alunos)) e use break pra sair.
  5. Nรฃo esqueรงa do else pra "opรงรฃo invรกlida".

ร‰ grandinho, mas vocรช jรก sabe TUDO que precisa. Vai por partes: primeiro faz o menu rodando. Depois adiciona uma opรงรฃo por vez. Pequenas vitรณrias ๐Ÿ†.

๐Ÿšจ
PARE! Esse aqui รฉ o boss fight do capรญtulo. Tenta MESMO antes de espiar. Vai dar bug? Vai. Vai precisar reler? Talvez. Mas quando VOCรŠ conseguir, vocรช vai sair desse capรญtulo com gรกs de programador de verdade. Bora!
๐Ÿ‘€ Sรณ clique aqui DEPOIS de tentar โ€” Ver cรณdigo completo โ–ผ
sistema_cadastro.py Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# lista que vai guardar todos os cadastros
alunos = []

while True:
    print("\n==== SISTEMA DE CADASTRO ====")
    print("[1] Adicionar aluno")
    print("[2] Listar alunos")
    print("[3] Buscar por nome")
    print("[0] Sair")
    opcao = input("Escolha uma opรงรฃo: ")

    if opcao == "1":
        nome  = input("Nome: ")
        idade = int(input("Idade: "))
        curso = input("Curso: ")
        alunos.append({"nome": nome, "idade": idade, "curso": curso})
        print(f"โœ… {nome} cadastrado(a) com sucesso!")

    elif opcao == "2":
        if len(alunos) == 0:
            print("Nenhum aluno cadastrado ainda.")
        else:
            print("\nโ€” Lista de alunos โ€”")
            for a in alunos:
                print(f"โ€ข {a['nome']} ({a['idade']}) โ€” {a['curso']}")

    elif opcao == "3":
        nome_busca = input("Nome a buscar: ")
        encontrou = False
        for a in alunos:
            if a["nome"] == nome_busca:
                print(f"โœ… {a['nome']} โ€” {a['idade']} anos โ€” {a['curso']}")
                encontrou = True
        if not encontrou:
            print(f"โŒ Nenhum aluno chamado {nome_busca}.")

    elif opcao == "0":
        print(f"\n๐Ÿ‘‹ Saindo... Total cadastrado: {len(alunos)} aluno(s).")
        break

    else:
        print("โŒ Opรงรฃo invรกlida. Tenta de novo!")
Run ยท sistema_cadastro.py
==== SISTEMA DE CADASTRO ====
[1] Adicionar aluno [2] Listar [3] Buscar [0] Sair
Escolha uma opรงรฃo:
Nome:
Idade:
Curso:

Escolha uma opรงรฃo:

๐ŸŽ‰ OLHA O QUE VOCรŠ ACABOU DE CONSTRUIR! ๐ŸŽ‰

Um programa interativo de verdade. Tem menu, tem cadastro, tem busca. Junta while + if + for + list + dict + input. Vocรช passou de "imprimi olรก mundo" pra "escrevi um sistema". Pode comemorar. ๐Ÿ†

๐Ÿ 
Desafio para Casa โ€” sistema_cadastro_pet.py
Versรฃo pet ยท pra fixar em casa
๐Ÿ 
Desafio para Casa
Faรงa em casa ยท sistema_cadastro_pet.py
๐Ÿ’ก Dica para fazer sozinho (em casa)

Pega o sistema_cadastro.py que vocรช (espero!) acabou de fazer e adapta pra pets. As chaves agora sรฃo "nome", "especie" e "idade". A lista vira pets = [].

Mantรฉm o mesmo menu (adicionar, listar, buscar, sair). Capricha nos textos โ€” pode pรดr emoji de pet ๐Ÿถ๐Ÿฑ๐Ÿ .

Por que esse exercรญcio? Porque praticar a mesma estrutura mudando sรณ os dados รฉ o que fixa de verdade. Quando vocรช sentir que tรก quase no automรกtico, รฉ sinal que aprendeu.

๐Ÿšจ
PARE! Tente sozinho em casa. Sem pressa. Pega รกgua, fecha a aba do spoiler, e vai. Quando voltar pra prรณxima aula, traz o cรณdigo rodando โ€” vai dar uma sensaรงรฃo ร“TIMA. Vocรช consegue!
๐Ÿ‘€ Sรณ clique aqui DEPOIS de tentar em casa โ€” Ver cรณdigo completo โ–ผ
sistema_cadastro_pet.py Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# lista que vai guardar os pets cadastrados ๐Ÿพ
pets = []

while True:
    print("\n==== CADASTRO DE PETS ๐Ÿพ ====")
    print("[1] Adicionar pet")
    print("[2] Listar pets")
    print("[3] Buscar por nome")
    print("[0] Sair")
    opcao = input("Escolha uma opรงรฃo: ")

    if opcao == "1":
        nome    = input("Nome do pet: ")
        especie = input("Espรฉcie: ")
        idade   = int(input("Idade: "))
        pets.append({"nome": nome, "especie": especie, "idade": idade})
        print(f"โœ… {nome} cadastrado(a)! ๐Ÿถ")

    elif opcao == "2":
        if len(pets) == 0:
            print("Nenhum pet cadastrado ainda.")
        else:
            print("\nโ€” Lista de pets โ€”")
            for p in pets:
                print(f"โ€ข {p['nome']} ({p['especie']}, {p['idade']} anos)")

    elif opcao == "3":
        nome_busca = input("Nome a buscar: ")
        encontrou = False
        for p in pets:
            if p["nome"] == nome_busca:
                print(f"โœ… {p['nome']} โ€” {p['especie']} โ€” {p['idade']} anos")
                encontrou = True
        if not encontrou:
            print(f"โŒ Nenhum pet chamado {nome_busca}.")

    elif opcao == "0":
        print(f"\n๐Ÿ‘‹ Saindo... Total: {len(pets)} pet(s).")
        break

    else:
        print("โŒ Opรงรฃo invรกlida.")
๐Ÿพ
Comparou com o sistema_cadastro.py? A estrutura รฉ idรชntica. Sรณ mudaram nomes de variรกveis e textos. Isso รฉ programaรงรฃo real: reaproveitar a forma, mudar o conteรบdo.
โœ…
Resumo do Capรญtulo 07
O que vocรช acabou de dominar
๐Ÿ“’ dict Estrutura chave: valor โ€” {"nome": "Ana"}
๐Ÿ”‘ Acessar aluno["nome"] โ€” colchetes + chave em aspas
โœ๏ธ Atualizar / Adicionar aluno["idade"] = 34 โ€” mesma sintaxe
๐Ÿ“‹ Lista de dicts Vรกrios cadastros numa lista โ€” alunos.append({...})
๐Ÿ›Ÿ .get() Acesso seguro com valor padrรฃo se a chave nรฃo existir
๐Ÿ› KeyError Quando vocรช pede chave que nรฃo existe โ€” confere a grafia!
๐Ÿ† Sistema de Cadastro while + if + for + list + dict โ€” VOCรŠ FEZ!
๐Ÿค Lista vs Dict Lista = ordem importa ยท Dict = significado importa

"Vocรช nรฃo tรก mais brincando de Python โ€”
tรก organizando dados de verdade." ๐Ÿ“’โœจ

๐Ÿค” Mas peraรญโ€ฆ

๐Ÿ˜ฑ
Vocรช fez o sistema_cadastro.py. Cadastrou 5 alunos. Tรก orgulhoso(a). Aรญ vocรช fecha o programaโ€ฆ e cadรช os dados? Sumiram! ๐Ÿ’จ Tudo guardado sรณ na memรณria โ€” quando o Python desliga, vai junto.
๐Ÿ’พ
ร‰ aรญ que entra o JSON. Um jeitinho simples de salvar seus dicionรกrios num arquivo que sobrevive a fechar o programa. E adivinha? JSON รฉ praticamente um dicionรกrio em texto.
๐Ÿ’พ Ir para Capรญtulo 08 โ€” JSON โ†’

ou โ† voltar ao hub