Pular para o conteúdo
Editor

Dicionários em Python: guia completo com exemplos reais

Iniciante30 min8 exercícios110 XP

Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução

0/8 exercícios

Abra o app de contatos do seu celular. Você procura uma pessoa pelo nome e obtém o número de telefone dela. Você não busca pela posição: ninguém diz "me dê o contato número 47". Você busca pelo nome.

Um dicionário em Python funciona exatamente assim. Em vez de guardar itens por posição (como uma lista), um dicionário guarda itens como pares chave-valor. A chave é o nome que você procura, e o valor é o que você recebe de volta.

Dicionários estão em toda parte na programação de verdade. Perfis de usuário, configurações, dados JSON vindos de APIs, contadores de palavras: tudo isso usa dicionários. Neste tutorial, você vai dominar todas as operações essenciais com dicionários.

Como criar um dicionário em Python

Você cria um dicionário escrevendo entre chaves {} os pares chave-valor, com dois-pontos entre a chave e o valor. Os pares são separados por vírgulas.

Criando um dicionário
# A simple dictionary
contact = {
'name': 'Alice',
'phone': '555-1234',
'email': 'alice@example.com',
}
print(contact)
Saída
{'name': 'Alice', 'phone': '555-1234', 'email': 'alice@example.com'}

As chaves geralmente são strings, mas podem ser qualquer valor hashable (na prática, um valor que não pode mudar), como um número, um booleano ou uma tupla desses valores. Os valores podem ser qualquer coisa: strings, números, listas e até outros dicionários.

Valores de tipos variados e dicionários vazios
# Different types of keys and values
student = {
'name': 'Bob',
'age': 16,
'grades': [85, 92, 78],
'active': True,
}
print(student)
# Empty dictionary - two ways
empty1 = {}
empty2 = dict()
print(empty1) # {}
print(empty2) # {}
Saída
{'name': 'Bob', 'age': 16, 'grades': [85, 92, 78], 'active': True}
{}
{}

Acessando e modificando valores do dicionário

Para obter um valor de um dicionário, coloque a chave entre colchetes. Para mudar um valor, atribua um novo valor a essa chave. Para adicionar um novo par, atribua um valor a uma chave que ainda não existe.

Acessar, modificar e adicionar valores
person = {'name': 'Alice', 'age': 25, 'city': 'Boston'}
# Access a value by key
print(person['name']) # Alice
print(person['age']) # 25
# Change an existing value
person['age'] = 26
print(person['age']) # 26
# Add a new key-value pair
person['job'] = 'Engineer'
print(person)
Saída
Alice
25
26
{'name': 'Alice', 'age': 26, 'city': 'Boston', 'job': 'Engineer'}
Acesso seguro com get()
person = {'name': 'Alice', 'age': 25}
# This would crash:
# print(person['salary']) # KeyError!
# Safe way: use .get() with a default value
print(person.get('salary', 'Not specified')) # Not specified
print(person.get('name', 'Unknown')) # Alice
Saída
Not specified
Alice
Inseguro: os colchetes travam quando a chave não existe
data = {'x': 10}
# Crashes with KeyError:
value = data['y']
Seguro: get() retorna um valor padrão
data = {'x': 10}
# Returns 0 if 'y' is missing:
value = data.get('y', 0)

Métodos essenciais de dicionários

Os dicionários vêm com vários métodos embutidos que facilitam o trabalho com eles. Estes são os que você vai usar com mais frequência.

keys(), values() e items()
fruit_prices = {'apple': 1.50, 'banana': 0.75, 'cherry': 3.00}
# keys() - get all keys
print(list(fruit_prices.keys())) # ['apple', 'banana', 'cherry']
# values() - get all values
print(list(fruit_prices.values())) # [1.5, 0.75, 3.0]
# items() - get all key-value pairs as tuples
print(list(fruit_prices.items())) # [('apple', 1.5), ('banana', 0.75), ('cherry', 3.0)]
Saída
['apple', 'banana', 'cherry']
[1.5, 0.75, 3.0]
[('apple', 1.5), ('banana', 0.75), ('cherry', 3.0)]
pop() e update()
inventory = {'apples': 5, 'bananas': 3, 'oranges': 8}
# pop() - remove a key and return its value
removed = inventory.pop('bananas')
print(removed) # 3
print(inventory) # {'apples': 5, 'oranges': 8}
# update() - merge another dictionary into this one
inventory.update({'grapes': 12, 'apples': 10})
print(inventory) # {'apples': 10, 'oranges': 8, 'grapes': 12}
Saída
3
{'apples': 5, 'oranges': 8}
{'apples': 10, 'oranges': 8, 'grapes': 12}

Repare que update() adiciona chaves novas e também sobrescreve as que já existem. No exemplo acima, 'apples' mudou de 5 para 10, e 'grapes' foi adicionada como uma chave nova.

Percorrendo dicionários

Você pode percorrer as chaves, os valores ou os dois. O jeito mais comum é percorrer items(), para obter a chave e o valor de uma vez.

Três formas de percorrer um dicionário
scores = {'Alice': 95, 'Bob': 87, 'Charlie': 72}
# Loop through keys (default)
for name in scores:
print(name)
print('---')
# Loop through values
for score in scores.values():
print(score)
print('---')
# Loop through both (most useful)
for name, score in scores.items():
print(f'{name}: {score}')
Saída
Alice
Bob
Charlie
---
95
87
72
---
Alice: 95
Bob: 87
Charlie: 72

Verificando se uma chave existe

Antes de acessar uma chave, muitas vezes você quer verificar se ela existe. A palavra-chave in procura nas chaves, não nos valores.

Usando in para verificar chaves
user = {'name': 'Alice', 'email': 'alice@example.com'}
# Check if a key exists
print('name' in user) # True
print('phone' in user) # False
print('phone' not in user) # True
# Common pattern: check before accessing
if 'email' in user:
print(f'Email: {user["email"]}')
else:
print('No email on file')
Saída
True
False
True
Email: alice@example.com

Dicionários aninhados

O valor de um dicionário pode ser outro dicionário. Isso se chama aninhamento e permite representar dados complexos e estruturados, como uma turma de alunos em que cada um tem seu próprio conjunto de atributos.

Dicionários aninhados
classroom = {
'Alice': {'age': 16, 'grade': 'A'},
'Bob': {'age': 15, 'grade': 'B'},
'Charlie': {'age': 16, 'grade': 'A'},
}
# Access a nested value with chained brackets
print(classroom['Alice']['grade']) # A
print(classroom['Bob']['age']) # 15
# Loop through nested data
for name, info in classroom.items():
print(f'{name} is {info["age"]} and got a {info["grade"]}')
Saída
A
15
Alice is 16 and got a A
Bob is 15 and got a B
Charlie is 16 and got a A

Para acessar um valor aninhado, você encadeia colchetes: primeiro a chave externa, depois a interna. Você pode aninhar quantos níveis quiser, mas mais de dois ou três níveis fica difícil de ler.

Erros comuns com dicionários

Tuplas como chaves de dicionário
# This works - tuples are immutable
locations = {
(40.71, -74.00): 'New York',
(51.50, -0.12): 'London',
}
print(locations[(40.71, -74.00)]) # New York
# This would crash:
# bad = {[1, 2]: 'nope'} # TypeError: unhashable type: 'list'
Saída
New York
Trava: modificar durante o laço
data = {'a': 1, 'b': 2, 'c': 3}
for key in data:
    if data[key] < 2:
        del data[key]  # RuntimeError!
Funciona: percorrer uma cópia das chaves
data = {'a': 1, 'b': 2, 'c': 3}
for key in list(data.keys()):
    if data[key] < 2:
        del data[key]  # Safe!
print(data)  # {'b': 2, 'c': 3}

Exercícios práticos

Hora de praticar! Estes exercícios vão das operações básicas com dicionários até padrões mais complexos.

Exercício 1: crie um dicionário e acesse um valor
Escreva o código

Crie um dicionário chamado pet com estes pares chave-valor:

  • 'name': 'Buddy'
  • 'species': 'dog'
  • 'age': 5
  • Depois, exiba o nome do pet.

    Saída esperada:

    Buddy
    # Create the pet dictionary
    # Print the pet's name
    Exercício 2: adicione e modifique entradas do dicionário
    Escreva o código

    Você recebe um dicionário que representa um livro. Siga estes passos, nesta ordem:

    1. Mude 'year' para 2024

    2. Adicione uma nova chave 'genre' com o valor 'fiction'

    3. Exiba o dicionário inteiro

    Saída esperada:

    {'title': 'The Great Adventure', 'author': 'Jane Smith', 'year': 2024, 'genre': 'fiction'}
    book = {'title': 'The Great Adventure', 'author': 'Jane Smith', 'year': 2020}
    # Step 1: Change the year to 2024
    # Step 2: Add genre
    # Step 3: Print the dictionary
    Exercício 3: acesso seguro com get()
    Escreva o código

    Você recebe um dicionário com o perfil de um usuário. Use o método .get() para exibir com segurança o telefone do usuário. Se a chave 'phone' não existir, exiba 'No phone number'.

    Saída esperada:

    No phone number
    profile = {'name': 'Alice', 'email': 'alice@mail.com'}
    # Use .get() to safely access the phone key
    Exercício 4: percorra um dicionário
    Escreva o código

    Percorra o dicionário e exiba cada fruta e seu preço neste formato:

    apple: $1.50
    banana: $0.75
    cherry: $3.00

    Garanta que os preços apareçam com exatamente duas casas decimais.

    prices = {'apple': 1.5, 'banana': 0.75, 'cherry': 3.0}
    # Loop and print each item
    Exercício 5: preveja a saída com chaves duplicadas
    Preveja a saída

    Leia este código com atenção e preveja o que ele vai exibir. O que acontece quando um dicionário tem chaves duplicadas?

    Digite a saída exata.

    data = {'a': 1, 'b': 2, 'a': 3}
    print(data)
    print(len(data))
    Exercício 6: corrija o bug na busca por um valor
    Corrija o erro

    Este código tenta verificar se a nota 'A' existe no dicionário, mas está verificando a coisa errada. Corrija-o para que ele exiba:

    Someone got an A!
    grades = {'Alice': 'A', 'Bob': 'B', 'Charlie': 'C'}
    if 'A' in grades:
    print('Someone got an A!')
    else:
    print('No one got an A.')
    Exercício 7: crie um contador de palavras
    Escreva o código

    Conte quantas vezes cada palavra aparece na lista dada. Guarde as contagens em um dicionário chamado word_counts e depois exiba-o.

    Saída esperada:

    {'hello': 3, 'world': 2, 'python': 1}
    words = ['hello', 'world', 'hello', 'python', 'hello', 'world']
    # Build a word count dictionary
    # Print the result
    Exercício 8: acesse dados de um dicionário aninhado
    Escreva o código

    Você recebe um dicionário aninhado de alunos. Percorra cada aluno e exiba o nome dele e a nota de matemática neste formato:

    Alice: 95
    Bob: 82
    Charlie: 91
    students = {
    'Alice': {'math': 95, 'english': 88},
    'Bob': {'math': 82, 'english': 90},
    'Charlie': {'math': 91, 'english': 85},
    }
    # Loop and print each student's math score

    Resumo: o que você aprendeu sobre dicionários em Python

    Ótimo trabalho! Aqui está uma revisão de tudo o que você sabe agora:

    ConceitoO que fazExemplo
    Criar um dicionárioGuarda pares chave-valord = {'name': 'Alice'}
    Acessar pela chaveObtém um valord['name']
    Acesso seguroValor padrão se a chave faltard.get('x', 0)
    Adicionar / modificarDefine um valord['age'] = 25
    keys()Todas as chavesd.keys()
    values()Todos os valoresd.values()
    items()Tuplas chave-valord.items()
    pop(key)Remove e retornad.pop('age')
    update()Junta dicionáriosd.update(other)
    inVerifica se a chave existe'name' in d
    AninhamentoDicionários dentro de dicionáriosd['a']['b']

    Os dicionários são uma das estruturas de dados mais importantes do Python. Dados JSON, respostas de APIs, arquivos de configuração, contadores: tudo isso gira em torno de pares chave-valor.

    O que vem a seguir?

    No próximo tutorial, Comprehensions em Python, você vai aprender a criar listas, dicionários e conjuntos em uma única linha de código elegante.

    As comprehensions (compreensões) permitem trocar laços de várias linhas por uma única linha concisa. Elas são um dos recursos que deixam o Python tão limpo e expressivo.

    Tutoriais relacionados

    Este tutorial foi útil?