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
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?