Dicionário Python: Guia Completo

Se você está começando sua jornada no mundo do Python, já deve ter se deparado com diversos tipos de dados, como números, strings e listas. Cada um tem sua utilidade, mas há uma estrutura de dados incrivelmente poderosa e fundamental que talvez você ainda não domine: Dicionário Python.

Pode não parecer, mas os dicionários são peças-chave em Python, essenciais para organizar e manipular dados de forma eficiente. Neste guia, vamos mergulhar fundo para entender o que são, para que servem e como utilizá-los de maneira prática em seus códigos. Prepare-se para desmistificar os dicionários e levá-los do zero ao domínio!


O Que Exatamente é um Dicionário em Python?

Imagine um dicionário tradicional, onde cada palavra (a chave) tem uma definição (o valor). Em Python, a lógica é a mesma! Um dicionário é uma estrutura de dados que armazena informações em pares de chave-valor. Cada elemento no dicionário é essa dupla: uma chave única e o dado associado a ela.

Essa associação nos permite representar relações do mundo real de forma intuitiva. Pense, por exemplo, em um país e sua capital, ou um livro e seu autor.

Um exemplo prático:

livro = {"titulo": "O Senhor dos Anéis", "autor": "J.R.R. Tolkien", "ano_publicacao": 1954}

Neste exemplo, “titulo”, “autor” e “ano_publicacao” são as chaves, e “O Senhor dos Anéis”, “J.R.R. Tolkien” e 1954 são seus respectivos valores. Para criar um dicionário, usamos chaves {} e separamos os pares por vírgula ,. A associação entre chave e valor é feita com dois-pontos :.


Para Que Servem os Dicionários em Python?

Dicionários são frequentemente usados para modelar entidades e suas características na vida real. Eles funcionam quase como um cartão de identificação, onde as chaves são os atributos e os valores são as informações correspondentes.

Vamos a mais um exemplo:

restaurante = {"nome": "Sabor da Vovó", "tipo_culinaria": "Brasileira", "avaliacao": 4.5}

Aqui, temos um dicionário que descreve um restaurante, com seu nome, tipo de culinária e avaliação. Simples e eficaz, não é?

Dicionários também são super versáteis. Veja este exemplo mais complexo, que poderia representar informações sobre filmes em um serviço de streaming:

filmes = [
    {'id': 'F001', 'titulo': 'A Origem', 'genero': 'Ficção Científica', 'ano': 2010},
    {'id': 'F002', 'titulo': 'Interestelar', 'genero': 'Ficção Científica', 'ano': 2014},
    {'id': 'F003', 'titulo': 'Parasita', 'genero': 'Drama', 'ano': 2019}
]

Se você já teve contato com arquivos JSON, provavelmente notou a semelhança. Isso não é coincidência! Dicionários Python têm uma estrutura muito parecida com JSON, o que os torna a escolha perfeita para quem trabalha com integração de APIs, enviando e recebendo dados nesse formato.


Mergulhando nas Chaves e Valores

Para usar dicionários com maestria, é crucial entender as particularidades de suas chaves e valores.

A Chave de um Dicionário Python

As chaves funcionam como o “nome” do atributo que você quer acessar. Geralmente usamos strings como chaves, mas também podemos usar números ou tuplas. A única regra de ouro é que uma chave não pode ser um tipo de dado mutável, como uma lista.

Outro ponto importantíssimo: as chaves em um dicionário Python são únicas. Você nunca terá a mesma chave associada a dois ou mais valores diferentes dentro do mesmo dicionário. Se tentar adicionar uma chave já existente, o valor antigo será sobrescrito.

O Valor de um Dicionário Python

Os valores representam o dado ou a informação associada à chave. E aqui a liberdade é total! Qualquer tipo de dado pode ser um valor em um dicionário: strings, números, booleanos, tuplas, listas e até mesmo outros dicionários.

Essa flexibilidade permite criar estruturas de dados aninhadas complexas, com dicionários dentro de dicionários ou listas dentro de dicionários, representando relações complexas do mundo real.

Veja este exemplo onde a lista de pratos favoritos de um cliente agora contém dicionários para cada prato:

cliente = {
    "id": "C001",
    "nome": "Ana Silva",
    "email": "ana.silva@email.com",
    "pratos_favoritos": [
        {"nome": "Feijoada", "ingredientes_chave": ["feijão preto", "carne seca"]}, 
        {"nome": "Moqueca", "ingredientes_chave": ["peixe", "azeite de dendê"]}
    ]
}

Dica: Python ignora espaços em branco dentro de um dicionário, então você pode quebrá-lo em várias linhas para melhorar a legibilidade, especialmente em dicionários grandes.


Como Criar Dicionários em Python

Antes de manipular, precisamos criar! Existem algumas formas principais de construir um dicionário:

Criando um Dicionário Novo

A sintaxe mais comum utiliza as chaves {}:

produto_eletronico = {"nome": "Smartphone X", "marca": "TechCorp", "preco": 1200.00}

Você também pode usar a função embutida dict(). Ela cria um novo dicionário a partir de argumentos nomeados:

produto_eletronico = dict(nome="Smartphone X", marca="TechCorp", preco=1200.00)
print(produto_eletronico)
# output:
# {'nome': 'Smartphone X', 'marca': 'TechCorp', 'preco': 1200.00}

Atenção: Ao usar dict(), cada parâmetro será automaticamente transformado em uma chave do tipo string. Isso significa que você não consegue criar chaves de outros tipos de dados com essa função.

Criando um Dicionário Vazio

Muitas vezes, você precisará começar com um dicionário vazio e preenchê-lo dinamicamente. Isso é comum quando você está iterando sobre uma lista ou outra sequência.

# Criando dicionário vazio com construtor
carrinho_de_compras = {}

# Criando dicionário vazio com a função dict()
carrinho_de_compras = dict()

Manipulando Dicionários em Python

Uma das grandes vantagens dos dicionários é que eles são mutáveis. Você pode adicionar, modificar e deletar pares de chave-valor mesmo depois de tê-los criado.

Como Acessar um Valor

Para pegar um valor, basta usar a variável do dicionário e passar a chave entre colchetes []:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567", "Carlos": "9555-1122"}
telefone_joao = agenda_contatos["João"]
print(telefone_joao)
# output:
# 9988-7766

Cuidado! Se tentar acessar uma chave que não existe, Python levantará um KeyError, interrompendo seu programa:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567"}
telefone_paula = agenda_contatos["Paula"] # Isso causaria um KeyError!

Para evitar isso, use o operador in com um if/else para verificar a existência da chave:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567"}
nome_procurado = "Paula"

if nome_procurado in agenda_contatos:
    telefone = agenda_contatos[nome_procurado]
    print(f"O telefone de {nome_procurado} é {telefone}.")
else:
    print(f"O contato {nome_procurado} não foi encontrado na agenda!")

Como Adicionar Elementos

Use a mesma sintaxe de acesso, mas atribua um novo valor:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567"}
agenda_contatos["Ana"] = "9333-8877" # Adiciona o novo par

telefone_ana = agenda_contatos["Ana"]
print(telefone_ana)
# output:
# 9333-8877

Como Modificar Valores

Para atualizar um par chave-valor existente, a sintaxe é idêntica à de adição. O valor antigo é simplesmente sobrescrito:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567"}
agenda_contatos["João"] = "9999-0000" # Altera o telefone de João

novo_telefone_joao = agenda_contatos["João"]
print(novo_telefone_joao)
# output:
# 9999-0000

Lembre-se: chaves são únicas. Ao modificar, você perde o valor anterior.

Como Remover Elementos

Use a palavra-chave del seguida da chave a ser deletada:

agenda_contatos = {"João": "9988-7766", "Maria": "9123-4567", "Carlos": "9555-1122"}
del agenda_contatos["Maria"]

print(agenda_contatos)
# output:
# {'João': '9988-7766', 'Carlos': '9555-1122'}

Os Principais Métodos de Dicionário em Python

Além das operações básicas, dicionários possuem métodos próprios para tarefas comuns:

  • .update(): Adiciona novos pares ou atualiza valores de chaves existentes, usando outro dicionário como argumento. Pythonconfiguracoes = {"tema": "claro", "idioma": "português"} configuracoes.update({"idioma": "inglês", "notificacoes": True}) print(configuracoes) # {'tema': 'claro', 'idioma': 'inglês', 'notificacoes': True}
  • .get(): Retorna o valor de uma chave. Se a chave não existir, retorna None (ou um valor padrão que você especificar), sem gerar KeyError. Pythonnome_usuario = configuracoes.get("nome", "Convidado") # Convidado (valor padrão) idioma_atual = configuracoes.get("idioma") # inglês
  • .pop(): Remove um par chave-valor e retorna o valor associado à chave. Gera erro se a chave não existir, a menos que um valor padrão seja fornecido. Pythonvalor_tema = configuracoes.pop("tema") # claro print(configuracoes) # {'idioma': 'inglês', 'notificacoes': True}
  • .popitem(): Remove e retorna o último par chave-valor inserido no dicionário (como uma tupla). Pythonultimo_item = configuracoes.popitem() # ('notificacoes', True)
  • .clear(): Remove todos os elementos, deixando o dicionário vazio. Pythonconfiguracoes.clear() # {}
  • .copy(): Cria uma cópia independente do dicionário, permitindo modificá-la sem afetar o original. Pythondados_originais = {"item": "caneta", "quantidade": 5} copia_dados = dados_originais.copy() copia_dados["quantidade"] = 10 print(dados_originais) # {'item': 'caneta', 'quantidade': 5} print(copia_dados) # {'item': 'caneta', 'quantidade': 10}
  • .keys(): Retorna um objeto “view” de todas as chaves do dicionário. Pythonproduto = {"nome": "Teclado", "preco": 150.00, "categoria": "Periféricos"} chaves = produto.keys() print(list(chaves)) # ['nome', 'preco', 'categoria']
  • .values(): Retorna um objeto “view” de todos os valores do dicionário. Pythonvalores = produto.values() print(list(valores)) # ['Teclado', 150.0, 'Periféricos']
  • .items(): Retorna um objeto “view” de todos os pares chave-valor como tuplas. Pythonitens = produto.items() print(list(itens)) # [('nome', 'Teclado'), ('preco', 150.0), ('categoria', 'Periféricos')]

Views de Dicionário: Os objetos retornados por .keys(), .values() e .items() são “views”. Eles se mantêm atualizados com o dicionário original: qualquer alteração no dicionário se reflete automaticamente na view.


Dicionários vs. Listas em Python: Quais as Diferenças?

Listas e dicionários são ambos “contêineres” de dados, mas a forma como armazenam e acessam informações é fundamentalmente diferente:

  • Listas: Guardam dados em uma ordem específica e são acessadas por índices numéricos. Pythonpontuacoes = [85, 92, 78, 95] primeira_pontuacao = pontuacoes[0] # Acessa pelo índice 0
  • Dicionários: Armazenam dados como pares chave-valor, sem uma ordem explícita, e são acessados usando suas chaves. Pythondados_aluno = {"nome": "Mariana", "matricula": "A123", "curso": "Engenharia"} nome_aluno = dados_aluno["nome"] # Acessa pela chave "nome"

Essa diferença implica que não faz sentido procurar pelo “primeiro” ou “último” valor em um dicionário, pois eles não têm ordem. Além disso, o tipo de erro ao acessar um elemento inexistente é diferente: listas geram IndexError, enquanto dicionários geram KeyError.


Listando e Percorrendo Dicionários

Você pode facilmente converter as chaves, valores ou itens de um dicionário em listas ou iterar sobre eles:

Listando Valores de um Dicionário

  • Para listar as chaves: list(dicionario) ou list(dicionario.keys()) Pythoninfo_cidade = {"nome": "Rio de Janeiro", "estado": "RJ", "populacao": 6700000} print(list(info_cidade.keys())) # ['nome', 'estado', 'populacao']
  • Para listar os valores: list(dicionario.values()) Pythonprint(list(info_cidade.values())) # ['Rio de Janeiro', 'RJ', 6700000]
  • Para listar os pares chave-valor: list(dicionario.items()) Pythonprint(list(info_cidade.items())) # [('nome', 'Rio de Janeiro'), ('estado', 'RJ'), ('populacao', 6700000)]

Percorrendo um Dicionário

Você pode usar um loop for com os métodos .keys(), .values() ou .items() para iterar sobre o dicionário:

info_cidade = {"nome": "Rio de Janeiro", "estado": "RJ", "populacao": 6700000}

# Iterando sobre as chaves
for chave in info_cidade.keys():
    print(f'Atributo -> {chave}')

# Iterando sobre os valores
for valor in info_cidade.values():
    print(f'Valor -> {valor}')

# Iterando sobre pares chave-valor (com desempacotamento de tupla!)
for chave, valor in info_cidade.items():
    print(f'"{chave}" é associado a "{valor}"')

Transformando Listas em Dicionários

E se o caminho for inverso? Transformar uma ou mais listas em um dicionário é um cenário comum.

De uma Lista Única

Você pode começar com um dicionário vazio e preenchê-lo com um for loop, aplicando uma lógica para definir chaves e valores.

numeros_extenso = ["um", "dois", "três", "quatro"]
dict_numeros = {}

for indice, palavra in enumerate(numeros_extenso):
    dict_numeros[indice + 1] = palavra # Chave: número inteiro, Valor: palavra

print(dict_numeros)
# output:
# {1: 'um', 2: 'dois', 3: 'três', 4: 'quatro'}

Juntando Duas Listas em um Dicionário

Se você tem duas listas e quer combiná-las (uma para chaves, outra para valores), a função zip() é sua melhor amiga. Ela permite iterar sobre as listas lado a lado.

nomes_aeronaves = ["Boeing 747", "Airbus A320", "Embraer E195"]
capacidades_assento = [524, 180, 124]

dicionario_aeronaves = {}

for nome, capacidade in zip(nomes_aeronaves, capacidades_assento):
    dicionario_aeronaves[nome] = capacidade

print(dicionario_aeronaves)
# output:
# {'Boeing 747': 524, 'Airbus A320': 180, 'Embraer E195': 124}

Com zip(), conseguimos associar cada nome de aeronave à sua capacidade de assento correspondente de forma simples e eficaz!


Conclusão

Os dicionários em Python são um tipo de dado extremamente útil e poderoso, uma verdadeira espinha dorsal para organizar informações. Eles permitem armazenar dados na forma de pares chave-valor e são mutáveis, o que significa que você pode adicionar, remover e atualizar valores depois de criá-los.

Neste artigo, desvendamos suas definições, aprendemos a manipulá-los, a diferenciar de listas e a percorrer seus elementos. Com esse conhecimento, você está pronto para integrar os dicionários de forma eficaz em seus próprios scripts e projetos!

Deixe um comentário