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.