Ir para o conteúdo

Dicionários

Um dicionário (dict) é uma estrutura de dados utilizada para representar uma coleção de pares chave-valor em Python.

Enquanto uma lista utiliza posições para acessar seus elementos, um dicionário utiliza chaves.

Por exemplo:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

Nesse caso, temos três pares:

"nome"   → "Ana"
"idade"  → 25
"cidade" → "Joinville"

A chave identifica o valor que queremos acessar.

Estrutura

Um dicionário é representado por elementos entre chaves {}.

Cada elemento possui uma chave e um valor, separados por ::

pessoa = {
    "nome": "Ana",
    "idade": 25
}

Podemos representar sua estrutura da seguinte forma:

        Dicionário
       ┌──────────────────┐
       │ "nome"  → "Ana"  │
       │ "idade" → 25     │
       └──────────────────┘

A chave é utilizada para localizar o valor correspondente.

Criação de dicionários

Um dicionário pode ser criado utilizando chaves:

pessoa = {
    "nome": "Ana",
    "idade": 25
}

Também podemos criar um dicionário vazio:

dados = {}

Ou utilizando o construtor dict():

dados = dict()

Também podemos criar um dicionário diretamente com dict():

pessoa = dict(nome="Ana", idade=25)

print(pessoa)

Resultado:

{'nome': 'Ana', 'idade': 25}

Chaves

Cada chave identifica um valor dentro do dicionário.

Por exemplo:

produto = {
    "nome": "Notebook",
    "preco": 3500,
    "estoque": 10
}

Temos as chaves:

nome
preco
estoque

E seus respectivos valores:

Notebook
3500
10

Uma chave não pode aparecer mais de uma vez no mesmo dicionário.

Se uma chave for informada novamente, seu valor será atualizado:

pessoa = {
    "nome": "Ana",
    "idade": 25
}

pessoa["idade"] = 26

print(pessoa)

Resultado:

{'nome': 'Ana', 'idade': 26}

Acesso aos valores

Podemos acessar um valor utilizando sua chave:

pessoa = {
    "nome": "Ana",
    "idade": 25
}

print(pessoa["nome"])
print(pessoa["idade"])

Resultado:

Ana
25

A expressão:

pessoa["nome"]

significa:

obtenha o valor associado à chave "nome".

Se tentarmos acessar uma chave que não existe, será gerada uma exceção KeyError:

print(pessoa["cidade"])

Acesso utilizando get()

O método get() também permite acessar um valor.

pessoa = {
    "nome": "Ana",
    "idade": 25
}

print(pessoa.get("nome"))

Resultado:

Ana

A principal diferença é o comportamento quando a chave não existe.

Com []:

print(pessoa["cidade"])

ocorre um KeyError.

Com get():

print(pessoa.get("cidade"))

o resultado é:

None

Também podemos definir um valor padrão:

print(pessoa.get("cidade", "Não informado"))

Resultado:

Não informado

Adicionar elementos

Podemos adicionar um novo par chave-valor utilizando a atribuição:

pessoa = {
    "nome": "Ana",
    "idade": 25
}

pessoa["cidade"] = "Joinville"

print(pessoa)

Resultado:

{'nome': 'Ana', 'idade': 25, 'cidade': 'Joinville'}

Se a chave já existir, seu valor será atualizado:

pessoa["idade"] = 26

Portanto, a mesma sintaxe pode ser utilizada tanto para adicionar quanto para atualizar um elemento.

Atualizar elementos

Podemos atualizar diretamente um valor:

produto = {
    "nome": "Notebook",
    "preco": 3500
}

produto["preco"] = 3200

print(produto)

Resultado:

{'nome': 'Notebook', 'preco': 3200}

Também podemos utilizar update() para atualizar vários valores:

produto.update({
    "preco": 3200,
    "estoque": 15
})

Remover elementos

O método pop() remove um elemento utilizando sua chave e retorna o valor removido:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

cidade = pessoa.pop("cidade")

print(cidade)
print(pessoa)

Resultado:

Joinville
{'nome': 'Ana', 'idade': 25}

Também podemos utilizar del:

del pessoa["idade"]

print(pessoa)

Se quisermos remover todos os elementos, podemos utilizar clear():

pessoa.clear()

print(pessoa)

Resultado:

{}

Verificar se uma chave existe

O operador in verifica se uma chave pertence ao dicionário:

pessoa = {
    "nome": "Ana",
    "idade": 25
}

print("nome" in pessoa)

Resultado:

True

Também podemos utilizar not in:

print("cidade" not in pessoa)

Resultado:

True

É importante perceber que o in verifica as chaves, e não os valores:

print("Ana" in pessoa)

Resultado:

False

Tamanho do dicionário

A função len() retorna a quantidade de pares chave-valor:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

print(len(pessoa))

Resultado:

3

Obter as chaves

O método keys() retorna as chaves do dicionário:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

print(pessoa.keys())

Podemos percorrer as chaves utilizando for:

for chave in pessoa.keys():
    print(chave)

Resultado:

nome
idade
cidade

Como keys() é iterável, também é comum escrever diretamente:

for chave in pessoa:
    print(chave)

Obter os valores

O método values() permite acessar os valores:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

print(pessoa.values())

Também podemos percorrer os valores:

for valor in pessoa.values():
    print(valor)

Resultado:

Ana
25
Joinville

Obter chaves e valores

O método items() permite percorrer os pares chave-valor:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

for chave, valor in pessoa.items():
    print(chave, valor)

Resultado:

nome Ana
idade 25
cidade Joinville

Essa é uma forma bastante utilizada quando precisamos trabalhar simultaneamente com a chave e o valor.

Dicionários podem armazenar diferentes tipos

Os valores de um dicionário podem ser de diferentes tipos:

dados = {
    "nome": "Ana",
    "idade": 25,
    "altura": 1.68,
    "ativo": True
}

Também podemos armazenar listas:

aluno = {
    "nome": "Ana",
    "notas": [8, 9, 10]
}

Nesse caso:

print(aluno["notas"])

Resultado:

[8, 9, 10]

Podemos acessar diretamente um elemento da lista:

print(aluno["notas"][0])

Resultado:

8

Também podemos armazenar outros dicionários:

aluno = {
    "nome": "Ana",
    "endereco": {
        "cidade": "Joinville",
        "estado": "SC"
    }
}

Para acessar a cidade:

print(aluno["endereco"]["cidade"])

Resultado:

Joinville

Dicionários aninhados

Quando um dicionário contém outros dicionários, temos uma estrutura de dicionários aninhados.

Por exemplo:

alunos = {
    "001": {
        "nome": "Ana",
        "idade": 20
    },
    "002": {
        "nome": "Bruno",
        "idade": 22
    }
}

Podemos acessar os dados de um aluno utilizando as chaves:

print(alunos["001"]["nome"])

Resultado:

Ana

Percorrer um dicionário

Podemos percorrer diretamente as chaves:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

for chave in pessoa:
    print(chave)

Para acessar também os valores:

for chave in pessoa:
    print(chave, pessoa[chave])

Ou utilizando items():

for chave, valor in pessoa.items():
    print(chave, valor)

Ordenação

Dicionários preservam a ordem de inserção dos elementos.

Por exemplo:

pessoa = {
    "nome": "Ana",
    "idade": 25,
    "cidade": "Joinville"
}

for chave, valor in pessoa.items():
    print(chave, valor)

Os elementos serão percorridos na ordem em que foram inseridos.

É importante, porém, diferenciar isso de uma lista: o acesso aos valores de um dicionário é feito principalmente por chave, e não pela posição.

Exemplo prático

Podemos utilizar um dicionário para representar um produto:

produto = {
    "nome": "Notebook",
    "preco": 3500,
    "estoque": 10
}

Podemos consultar o preço:

print(produto["preco"])

Atualizar o preço:

produto["preco"] = 3200

Adicionar uma nova informação:

produto["categoria"] = "Informática"

E percorrer todos os dados:

for chave, valor in produto.items():
    print(f"{chave}: {valor}")

Resultado:

nome: Notebook
preco: 3200
estoque: 10
categoria: Informática

Principais métodos

MétodoFunção
get()Obtém um valor a partir de uma chave
keys()Retorna as chaves
values()Retorna os valores
items()Retorna os pares chave-valor
update()Adiciona ou atualiza elementos
pop()Remove um elemento pela chave
clear()Remove todos os elementos

Também podemos utilizar:

OperaçãoFunção
dict[chave]Acessa ou modifica um valor
inVerifica se uma chave existe
not inVerifica se uma chave não existe
len()Retorna a quantidade de pares

Exemplo completo

O exemplo abaixo demonstra algumas das principais operações realizadas com um dicionário:

aluno = {
    "nome": "Ana",
    "idade": 20,
    "curso": "Computação"
}

print("Dados do aluno:")
print(aluno)

print("\nNome:")
print(aluno["nome"])

aluno["idade"] = 21

print("\nApós atualizar a idade:")
print(aluno)

aluno["cidade"] = "Joinville"

print("\nApós adicionar a cidade:")
print(aluno)

print("\nChaves:")
for chave in aluno.keys():
    print(chave)

print("\nValores:")
for valor in aluno.values():
    print(valor)

print("\nDados:")
for chave, valor in aluno.items():
    print(f"{chave}: {valor}")

aluno.pop("cidade")

print("\nApós remover a cidade:")
print(aluno)

Conclusão

O dict é uma estrutura de dados utilizada para representar coleções de pares chave-valor.

Suas principais características são:

  • Os dados são organizados em pares chave-valor.
  • As chaves identificam os valores.
  • Uma chave não pode aparecer mais de uma vez.
  • Uma chave existente pode ter seu valor atualizado.
  • É possível adicionar e remover pares.
  • O acesso aos valores é realizado utilizando suas chaves.
  • Os valores podem ser de diferentes tipos.
  • Dicionários podem conter listas e outros dicionários.
  • Podemos percorrer chaves, valores ou pares chave-valor.

A principal ideia é:

chave → valor

Por exemplo:

aluno = {
    "nome": "Ana",
    "idade": 20
}

Nesse caso:

"nome" → "Ana"
"idade" → 20

O dicionário é especialmente útil quando queremos representar informações em que cada valor possui uma identificação que permite localizá-lo.