Pular para o conteúdo
</>RoByte

Buscar cursos e aulas

Aulas do curso

Vídeo em breve

Por enquanto, esta aula está disponível só em texto — o vídeo entra assim que ficar pronto.

Listas e dicionários

Dicionários

Guardando dados por nome em vez de posição: criar, acessar, remover, atualizar e percorrer dicionários. · 18 min

Código no GitHubAbrir no Colab

Numa lista, você acessa um item pela posição (frutas[0]). Num dicionário, você acessa por um nome (chave) que você escolhe — muito mais natural quando os dados têm significado próprio.

pessoa = {
    "nome": "Ada",
    "idade": 28,
    "programadora": True,
}

print(pessoa["nome"])   # "Ada"
print(pessoa["idade"])  # 28

Adicionando e atualizando chaves

pessoa["cidade"] = "São Paulo"   # adiciona uma chave nova
pessoa["idade"] = 29              # atualiza uma chave existente

Atenção

Acessar uma chave que não existe (pessoa["profissao"]) dá KeyError. Para acessar com segurança, use pessoa.get("profissao") — devolve None em vez de quebrar o programa se a chave não existir.

Removendo chaves e outros métodos

pessoa = {"nome": "Ada", "idade": 28, "cidade": "São Paulo"}

del pessoa["cidade"]             # remove a chave "cidade"
idade = pessoa.pop("idade")       # remove "idade" e devolve o valor: 28

print(pessoa.keys())    # dict_keys(['nome'])
print(pessoa.values())  # dict_values(['Ada'])

pessoa.update({"idade": 29, "cidade": "Rio de Janeiro"})  # adiciona/atualiza várias chaves de uma vez
print(pessoa)  # {'nome': 'Ada', 'idade': 29, 'cidade': 'Rio de Janeiro'}

Dica

.setdefault(chave, valor) só define a chave se ela ainda não existir — muito útil para inicializar contadores sem precisar de um if: contagem.setdefault(item, 0) seguido de contagem[item] += 1.

Checando se uma chave existe

pessoa = {"nome": "Ada", "idade": 28}

if "idade" in pessoa:
    print("Tem idade cadastrada.")

if "profissao" not in pessoa:
    print("Profissão não cadastrada.")

Atenção

in num dicionário checa as chaves, não os valores. "Ada" in pessoa é False nesse exemplo, mesmo "Ada" sendo um valor — para checar valores, use "Ada" in pessoa.values().

Percorrendo um dicionário

pessoa = {"nome": "Ada", "idade": 28, "cidade": "São Paulo"}

for chave in pessoa:
    print(chave, "->", pessoa[chave])

# ou, mais direto, pegando chave e valor de uma vez:
for chave, valor in pessoa.items():
    print(f"{chave}: {valor}")

Lista de dicionários: o combo mais usado na prática

Um padrão extremamente comum é uma lista onde cada item é um dicionário — por exemplo, vários “registros” com os mesmos campos:

alunos = [
    {"nome": "Ada", "nota": 9.2},
    {"nome": "Grace", "nota": 8.7},
    {"nome": "Alan", "nota": 7.5},
]

for aluno in alunos:
    print(f"{aluno['nome']}: {aluno['nota']}")

Dica

Esse padrão — lista de dicionários — é como praticamente toda API na internet devolve dados (em JSON, que é quase idêntico à sintaxe de dicionário do Python). Vale a pena se acostumar com ele agora.

Exercícios

Exercício

1. Aquecimento. Crie um dicionário livro com as chaves titulo, autor e ano. Imprima uma frase formatada usando as três, com f-string.

Exercício

2. Cadastro simples. Peça nome, idade e cidade ao usuário (três input()), guarde num dicionário e imprima o dicionário formatado, uma chave por linha, usando um for chave, valor in dados.items().

Exercício

3. Desafio. Refaça o exercício “contar itens repetidos” da aula de Listas — dada compras = ["arroz", "feijão", "arroz", "leite", "feijão", "arroz"], conte quantas vezes cada item aparece —, mas agora usando um dicionário: para cada item, use .setdefault(item, 0) e depois contagem[item] += 1. Compare com a versão que você fez só com listas: qual ficou mais simples?