Tuplas e dicionários
Conheça outras formas de guardar dados, incluindo pares de chave e valor.
Até agora, conhecemos as listas como a nossa estrutura principal para guardar coleções de dados. Porém, o Python oferece outros dois tipos de coleções muito utilizados no dia a dia: as tuplas e os dicionários.
Cada uma tem uma personalidade diferente e serve para situações distintas. Vamos conhecê-las!
Tupla (a coleção que nunca muda)
Imagine que você tem um contrato assinado e reconhecido em cartório. Uma vez assinado, ninguém pode alterar o que está escrito nele. É permanente.
As tuplas funcionam exatamente assim: são coleções de itens que, depois de criadas, não podem ser modificadas. Você não consegue adicionar, remover ou alterar nenhum item dentro delas. Esse comportamento é chamado de imutabilidade.
Em troca dessa rigidez, as tuplas são mais rápidas e consomem menos memória do que as listas, sendo ideais para guardar informações que nunca deveriam mudar, como as coordenadas geográficas de uma cidade, a data de nascimento de uma pessoa ou constantes matemáticas.
Como criar uma tupla?
Enquanto as listas usam colchetes [ ], as tuplas usam parênteses ( ):
# Criando uma tupla com as coordenadas de São Paulo
coordenadas_sp = (-23.5505, -46.6333)
print(coordenadas_sp) # Mostra: (-23.5505, -46.6333)
# Criando uma tupla com informações de um usuário (nome, idade, e-mail)
usuario = ("João Silva", 30, "joao@email.com")
print(usuario[0]) # Mostra: João Silva (o acesso por índice funciona igual!)
print(usuario[1]) # Mostra: 30
print(usuario[2]) # Mostra: joao@email.com
"Desempacotando" a tupla
Uma outra forma de acessar os itens é "desempacotar" a tupla. Isto significa criar variáveis para receber cada item na tupla. Isso é feito da seguinte forma.
usuario = ("João Silva", 30, "joao@email.com")
nome, idade, email = usuario # uma variável para cada item, separadas por vírgula
print(nome) # Mostra: João Silva
print(idade) # Mostra: 30
print(email) # Mostra: joao@email.com
O número de variáveis deve corresponder ao número de itens na tupla. O código abaixo ira gerar um ValueError.
usuario = ("João Silva", 30, "joao@email.com")
nome, idade, email, whatsapp = usuario
# Gera erro:
# ValueError: not enough values to unpack (expected 4, got 3)
A prova da imutabilidade
Se você tentar modificar um item de uma tupla, o Python vai recusar na hora:
meses = ("Janeiro", "Fevereiro", "Março")
# Isto causará um TypeError: 'tuple' object does not support item assignment
meses[0] = "JANEIRO"
Se a tupla é conhecida como uma coleção IMUTÁVEL (devido à característica de não poder ser alterada após sua criação), a lista (que pode ser alterada a qualquer momento) é conhecida por ser uma coleção MUTÁVEL.
Atenção ao criar tuplas com um só elemento
Para criar uma lista com um único item, podemos fazer:
lista = ["pão"] # o Python entende como lista
Para criar uma tupla com um único item, precisamos obrigatoriamente colocar uma vírgula após o item:
uma_coordenada = (3.14) # aqui o Python reconhece como float, não como tupla
uma_coordenada = (3.14,) # aqui o Python reconhece como tupla
Dicionário (a coleção com etiquetas)
Pense em uma ficha de cadastro de um consultório médico. Nela, cada informação tem uma etiqueta que explica o que ela é: Nome: João, Idade: 30, Plano: Premium.
Ao contrário das listas e tuplas (onde os itens são acessados por números de posição), os dicionários guardam informações em pares de chave e valor. A chave é a etiqueta (o nome do campo) e o valor é a informação em si.
Isso torna a leitura do código muito mais intuitiva e descritiva!
Como criar um Dicionário?
Os dicionários usam chaves { } e cada par chave-valor é separado por dois pontos ::
# Criando um dicionário com as informações de um produto
produto = {
"nome": "Tênis Esportivo",
"preco": 199.90,
"tamanho": 42,
"disponivel": True
}
Como acessar os valores?
Em vez de usar um número de índice como nas listas, você usa o nome da chave dentro dos colchetes:
produto = {
"nome": "Tênis Esportivo",
"preco": 199.90,
"tamanho": 42,
"disponivel": True
}
# Acessando valores pelas suas chaves (etiquetas)
print("Produto:", produto["nome"]) # Mostra: Tênis Esportivo
print("Preço: R$", produto["preco"]) # Mostra: R$ 199.9
print("Tamanho:", produto["tamanho"]) # Mostra: 42
print("Disponível:", produto["disponivel"]) # Mostra: True
Adicionando e alterando itens no dicionário
Diferente das tuplas, os dicionários são mutáveis (podem ser modificados). Para adicionar uma nova chave ou alterar o valor de uma existente, usamos a mesma sintaxe de atribuição:
produto = {"nome": "Tênis", "preco": 199.90}
# Alterando o preço
produto["preco"] = 159.90
# Adicionando uma nova chave que ainda não existia
produto["cor"] = "Azul"
print(produto)
# Mostra: {'nome': 'Tênis', 'preco': 159.9, 'cor': 'Azul'}
Acessando valores com segurança usando .get()
E se você tentar acessar uma chave que não existe no dicionário usando colchetes? O Python vai travar e gerar um erro chamado KeyError — parecido com o IndexError das listas.
produto = {"nome": "Tênis", "preco": 199.90}
# Isto vai gerar um KeyError, pois a chave "cor" não existe!
print(produto["cor"])
Para evitar esse problema, existe o método .get(). Ele funciona como uma busca educada: tenta encontrar a chave, mas se ela não existir, em vez de travar o programa, ele simplesmente retorna None — ou um valor padrão que você mesmo define.
Pense assim: é como perguntar a um atendente de loja "vocês têm tênis azul?" — se não tiver, ele responde "não temos" em vez de fechar a loja.
produto = {"nome": "Tênis", "preco": 199.90}
# Com .get(), se a chave não existir, retorna None (sem erro)
cor = produto.get("cor")
print(cor) # Mostra: None
# Você também pode definir um valor padrão caso a chave não exista
cor = produto.get("cor", "Cor não informada")
print(cor) # Mostra: Cor não informada
# Se a chave existir, o .get() retorna o valor normalmente
nome = produto.get("nome", "Sem nome")
print(nome) # Mostra: Tênis
Quando usar cada um?
- Use
dicionario["chave"]quando você tem certeza que a chave existe.- Use
dicionario.get("chave")quando a chave é opcional ou pode não estar presente — é a forma mais segura.
Exemplos práticos
Registro de um Filme
Imagine que você está montando um banco de dados de filmes clássicos. As informações de um filme — como título, diretor e ano de lançamento — nunca mudam. São fatos históricos. Por isso, uma tupla é a escolha ideal!
# As informações de um filme nunca mudam, então usamos uma tupla
filme = ("De Volta Para o Futuro", "Robert Zemeckis", 1985)
# Desestruturação: podemos "desempacotar" a tupla em variáveis separadas
titulo, diretor, ano = filme
print("Título:", titulo)
print("Diretor:", diretor)
print("Ano:", ano)
Saída esperada:
Título: De Volta Para o Futuro
Diretor: Robert Zemeckis
Ano: 1985
Ficha de cadastro de aluno
Agora, imagine um sistema simples de cadastro de alunos. Cada aluno tem nome, turma e nota. Usar um dicionário torna o código muito mais fácil de entender.
# O usuário preenche os dados do aluno
print("=== Cadastro de Aluno ===")
nome = input("Digite o nome do aluno: ")
turma = input("Digite a turma (ex: A, B, C): ")
nota = float(input("Digite a nota do aluno (0 a 10): "))
# Guardamos tudo num dicionário bem organizado
aluno = {
"nome": nome,
"turma": turma,
"nota": nota
}
# Calculamos a situação com base na nota e guardamos no dicionário
if aluno["nota"] >= 7:
aluno["situacao"] = "Aprovado ✅"
else:
aluno["situacao"] = "Recuperação ⚠️"
# Exibimos a ficha completa
print("=== Ficha do Aluno ===")
print("Nome:", aluno["nome"])
print("Turma:", aluno["turma"])
print("Nota:", aluno["nota"])
print("Situação:", aluno["situacao"])
Saída esperada:
=== Cadastro de Aluno ===
Digite o nome do aluno: Ana Costa
Digite a turma (ex: A, B, C): B
Digite a nota do aluno (0 a 10): 8.5
=== Ficha do Aluno ===
Nome: Ana Costa
Turma: B
Nota: 8.5
Situação: Aprovado ✅
Perceba como o código fica muito mais legível com dicionário:
aluno["nota"]é muito mais claro do que se usássemos uma lista e tentássemos lembrar que a nota está na posição 2!
Resumo comparativo: listas, tuplas e dicionários
| Característica | Lista [ ] |
Tupla ( ) |
Dicionário { } |
|---|---|---|---|
| Acesso | Por índice numérico | Por índice numérico | Por chave (etiqueta) |
| Mutável? | ✅ Sim | ❌ Não | ✅ Sim |
| Uso ideal | Coleção ordenada que muda | Coleção de dados fixos e permanentes | Registros com campos nomeados |
O que aprendemos nesta lição
Nesta lição, você aprendeu que:
- Tuplas são coleções criadas com parênteses
( ), imutáveis (não podem ser alteradas após a criação) e mais eficientes em memória. - Dicionários são coleções criadas com chaves
{ }que guardam dados em pares de chave: valor. - Nos dicionários, acessamos os valores pela sua chave (etiqueta), e não por um número de índice.
- Dicionários são mutáveis: podemos adicionar novas chaves e alterar valores existentes a qualquer momento.
- A escolha entre lista, tupla ou dicionário depende da necessidade: dados que mudam, dados fixos ou dados com nomes descritivos.