32 minutos de leitura

Dicionário em Python: o guia definitivo para iniciantes

Por Juliano Faccioni
Conteúdos do artigo

Quer entender de fato o que é um dicionário em Python e como utilizá-los nos seus scripts? Aprenda o que são chaves e valores, como podemos criar dicionários e como manipulá-los de forma efetiva com o guia definitivo de dicionários da Asimov Academy!

Se você está dando seus primeiros passos na linguagem de programação Python, já deve ter se deparado com diferentes tipos de dados, como números, strings e listas. Cada um deles nos permite armazenar dados específicos e manipulá-los de certas maneiras. Contudo, talvez você ainda não saiba o que é um dicionário em Python. Pode não parecer, mas os dicionários são uma das estruturas de dados mais fundamentais da linguagem Python!

Mas o que exatamente é um dicionário em Python? Quando e como posso querer utilizá-lo? E como os dicionários se comparam a outras estruturas de dados muito utilizadas, como listas? É disso que vamos tratar neste artigo.

Aqui, vamos apresentar tudo o que você precisa saber sobre dicionários em Python para começar a utilizá-los de forma efetiva. Vamos entender como dicionários armazenam dados, aprender a criar e manipular dicionários em Python e compreender como os dicionários se relacionam com outros tipos de dados em Python. Vamos lá!

O que é um dicionário em Python?

Um dicionário em Python é uma estrutura de dados que permite armazenar dados em pares. Chamamos cada par de dados de par chave-valor. Assim, cada elemento em um dicionário consiste em uma chave e um valor associado a essa chave. Podemos utilizar esta associação para representar relações que existem no mundo real, como um produto e seu preço.

Exemplo de dicionário em Python

O código abaixo representa um exemplo de dicionário escrito na linguagem de programação Python, ao qual atribuímos a variável pessoa:

pessoa = {"nome": "Paulo", "idade": 29, "filhos": ["João", "Maria"]}
Testar

Veja que, para criar um dicionário em Python, basta utilizar chaves ( { } ) e inserir os pares de chave-valor separados por vírgula ( , ). Por fim, fazemos a associação entre cada chave e seu respectivo valor com o sinal de dois-pontos ( : ).

Para que serve um dicionário em Python?

Com frequência, utilizamos dicionários em Python para representar estruturas e relações que existem na vida real. É quase como se um dicionário definisse os atributos (chaves) e valores de uma entidade qualquer da vida real. No exemplo de código acima, podemos interpretar o dicionário como sendo os atributos de uma pessoa: nesse caso, a pessoa possui o nome "Paulo", a idade 29 e uma lista de filhos ["João", "Maria"].

A seguir, temos mais um exemplo de dicionário em Python. Você consegue imaginar o que ele representa?

carro = {"marca": "Chevrolet", "modelo": "Tracker", "ano": 2020}
TestarTestar

Isso mesmo: esse dicionário representa um carro, com seus atributos sendo a marca do carro, o modelo e o ano de fabricação.

Aqui vai outro exemplo mais complexo: uma lista de dicionários que poderia representar produtos de um site de E-commerce:

produtos = [
    {'id': '2810', 'tipo': 'forno', 'ano': 2020},
    {'id': '9812', 'tipo': 'celular', 'ano': 2019},
    {'id': '7756', 'tipo': 'geladeira', 'ano': 2022}
]
Testar

Se você possui alguma familiaridade com arquivos JSON, provavelmente percebeu que os dicionários possuem uma estrutura bastante semelhante a um JSON. Em decorrência disso, quem cria integrações de Python com APIs frequentemente envia e recebe dados na forma de dicionários em Python.

O que é a chave de um dicionário Python?

Seguindo com a analogia anterior, as chaves de um dicionário representam o “nome” de um atributo, a partir do qual acessamos o valor. Com frequência, utilizamos strings como chaves de dicionários, embora também possamos utilizar outros tipos de dados, como números ou tuplas. A única restrição é que um tipo de dado mutável (como uma lista) não pode ser uma chave de um dicionário.

Outro ponto importante é que as chaves de dicionários em Python são únicas: não podemos ter a mesma chave associada a dois ou mais valores do dicionário ao mesmo tempo.

O que é o valor de um dicionário Python?

Os valores de um dicionário representam cada dado ou informação associado a uma determinada chave. Podemos fazer uma analogia entre um dicionário em Python e um dicionário escolar tradicional: assim como em um dicionário tradicional cada palavra está associada à sua definição, nos dicionários em Python cada chave está associada ao seu valor.

Qualquer tipo de dado pode ser um valor em um dicionário: strings, listas, valores booleanos, tuplas… até mesmo outros dicionários são valores válidos para um dicionário. Note que isso permite que criemos estruturas de dados aninhadas de forma arbitrária, com dicionários dentro de dicionários ou listas dentro de dicionários.

Veja o exemplo abaixo, onde adaptamos o dicionário pessoa para que os filhos sejam também representados por dicionários:

pessoa = {
    "nome": "Paulo",
    "idade": 29,
    "filhos": [
        {"nome": "João", "idade": 6}, 
        {"nome": "Maria", "idade": 9}
    ]
}
Testar

Note, ainda, que é possível quebrar um dicionário Python em múltiplas linhas. Python ignora o espaço em branco dentro de um dicionário, o que torna mais conveniente e legível escrever grandes dicionários em múltiplas linhas.

Como fazer um dicionário em Python?

Antes de conseguir manipular um dicionário Python, precisamos aprender como podemos criá-los. Nesta seção, aprenderemos sobre as principais formas de criar um dicionário em Python.

Como criar um dicionário novo em Python

Já aprendemos a sintaxe básica de um dicionário em Python: usamos chaves ( { } ) para definir o dicionário, vírgulas ( , ) para separar os pares chave-valor e dois-pontos ( : ) para associar uma chave a um valor. Podemos usar essa sintaxe para criar um dicionário novo em Python, por exemplo:

carro = {"marca": "Chevrolet", "modelo": "Tracker", "ano": 2020}
TestarTestar

Além disso, podemos também utilizar a função dict(). Essa é uma função embutida de Python usada para criar um novo dicionário a partir dos seus argumentos. Podemos recriar o mesmo dicionário acima com a função dict() da seguinte forma:

carro = dict(marca="Chevrolet", modelo="Tracker", ano=2020)
print(carro)

# output:
# {'marca': 'Chevrolet', 'modelo': 'Tracker', 'ano': 2020}
Testar

Além da sintaxe ligeiramente diferente (afinal, aqui estamos usando uma função de Python e não mais a sintaxe de construção de dicionários), aqui há também uma limitação: cada um dos parâmetros entregues à função dict() será obrigatoriamente transformado em um chave com o tipo de dado string. Assim, quando usamos a função dict(), não conseguimos criar chaves de outros tipos de dados.

Como criar um dicionário vazio em Python

Em alguns casos, podemos querer definir um dicionário vazio em Python. Isso ocorre frequentemente quando queremos preencher um dicionário com valores de uma lista ou outra sequência qualquer. Nesses casos, podemos criar um dicionário vazio, iterar sobre a sequência e ir adicionando os pares chave-valor ao dicionário a cada iteração.

Podemos criar um dicionário vazio tanto com o construtor de dicionários quanto com a função dict(). Veja os exemplos abaixo:

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

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

Como manipular dicionários em Python?

Dicionários em Python são um tipo de dado mutável. Isso significa que podemos adicionar, modificar e deletar pares de chave-valor de um dicionário mesmo depois de tê-lo criado.

A seguir, veremos as principais formas de manipular dicionários em Python.

Como acessar um valor em um dicionário Python

Para acessar um valor em um dicionário Python, precisamos acessar a variável do dicionário e passar a sua chave entre colchetes ( [ ] ). Por exemplo, se tivermos um dicionário que associa países a suas respectivas capitais, podemos acessar a capital de um país qualquer com a construção dicionario["nome_do_pais"].

Acompanhe o exemplo abaixo:

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
capital_brasil = capitais["Brasil"]
print(capital_brasil)

# output:
# Brasília
Testar

Aqui a construção capitais["Brasil"] é usada para “pegar” o valor associado à chave "Brasil" de dentro do dicionário. Assim, quando exibimos o seu valor com a função print(), o texto Brasília é exibido.

Mas atenção! Se tentarmos pegar um valor de uma chave que não existe no dicionário, encontraremos um KeyError, o que terminará a execução do nosso programa:

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
capital_italia = capitais["Itália"]  # KeyError: 'Itália'
Testar

Para contornarmos situações como essa, podemos usar o operador in junto de um bloco if/else para testar se a chave existe no dicionário antes de pegar o seu valor:

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
pais = "Itália"

if pais in capitais:
    capital = capitais[pais]
    print(f"A capital de {pais} é {capital}.")
else:
    print(f"A capital de {pais} não foi encontrada no dicionário!")
Testar

Experimente mudar o valor da variável pais para uma chave que existe no dicionário e veja que a mensagem exibida muda!

Como adicionar elementos em um dicionário Python

Se quisermos adicionar novos elementos a um dicionário Python, usamos a mesma sintaxe de “pegar” um valor, ao mesmo tempo em que atribuímos um valor novo. Por exemplo, se quisermos adicionar o par chave-valor "Itália": "Roma" ao dicionário capitais, podemos escrever capitais["Itália"] = "Roma".

Acompanhe no exemplo de código abaixo:

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
capitais["Itália"] = "Roma"

capital_italia = capitais["Itália"]
print(capital_italia)

# output:
# Roma
Testar

Note que o código não produziu o KeyError, demonstrando que conseguimos adicionar o par chave-valor ao dicionário.

Como modificar valores de um dicionário Python

Para atualizar um par chave-valor que já existe em um dicionário, usamos a mesma sintaxe que usamos para adicionar elementos em um dicionário Python. Em outras palavras, usamos a construção dicionario["chave_existente"] = "novo_valor".

Veja que o código abaixo atualiza o valor da chave "Brasil" para "???":

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
capitais["Brasil"] = "???"

capital_brasil = capitais["Brasil"]
print(capital_brasil)

# output:
# ???
Testar

Como já vimos anteriormente, um dicionário não pode conter chaves duplicadas. Isso significa que, quando atualizamos o valor de um dicionário, o seu valor anterior se perde. Tome cuidado para não sobrescrever nenhuma informação importante!

Como remover elementos de um dicionário Python

Por fim, podemos remover elementos de um dicionário com a palavra-chave del, seguida da chave cujo valor queremos deletar: del dicionario["chave_para_deletar"].

Acompanhe o exemplo a seguir:

capitais = {"Brasil": "Brasília", "Alemanha": "Berlim", "Japão": "Tóquio"}
del capitais["Brasil"]

print(capitais)

# output:
# {'Alemanha': 'Berlim', 'Japão': 'Tóquio'}
Testar

Note que, ao exibirmos o dicionário com a função print(), o par chave-valor "Brasil": "Brasília" não aparece, indicando que o deletamos de fato.

Os principais métodos de dicionário em Python

Métodos em Python são funções atreladas a um tipo de dado. Os dicionários em Python possuem métodos para ações comuns que queremos realizar com eles. Vamos agora passar pelos principais métodos de dicionários em Python, explicando como e para que usá-los.

Adicionar e atualizar elementos do dicionário com o método update()

O método update() permite adicionar novos pares chave-valor ou atualizar o valor de uma chave existente em um dicionário. Utilizamos o método update() com um outro dicionário como argumento:

meu_dicionario = {"nome": "Alice", "idade": 25}
meu_dicionario.update({"idade": 26, "cidade": "São Paulo"})

print(meu_dicionario)

# output: {'nome': 'Alice', 'idade': 26, 'cidade': 'São Paulo'}
Testar

Obter valores de um dicionário em Python com o método get()

O método get() retorna o valor associado a uma chave específica. A vantagem dessa abordagem é que, se a chave não existir, ele retorna um outro valor (None por padrão) em vez de gerar um KeyError:

meu_dicionario = {"nome": "Bob", "idade": 30}

idade = meu_dicionario.get("idade")
print(idade)

# output: 30

cidade = meu_dicionario.get("cidade", "???")
print(cidade)

# output: ???
Testar

Remover um par chave-valor do dicionário com pop()

O método pop() remove um par chave-valor do dicionário, retornando o valor associado à chave. Se a chave não existir, ele gera um erro, a menos que seja fornecido um valor padrão (de forma similar ao método get() ):

meu_dicionario = {"nome": "Carlos", "idade": 22}
valor_idade = meu_dicionario.pop("idade")

print(valor_idade)
# output: 22

print(meu_dicionario)
# output: {'nome': 'Carlos'}
Testar

Remover o último par chave-valor inserido no dicionário com popitem()

O método popitem() remove e retorna o último par chave-valor inserido no dicionário:

meu_dicionario = {"nome": "Diana", "idade": 28, "cidade": "Rio de Janeiro"}
ultimo_item = meu_dicionario.popitem()

print(ultimo_item)
# output: ('cidade', 'Rio de Janeiro')

print(meu_dicionario)
# output: {'nome': 'Diana', 'idade': 28}
Testar

Limpar o dicionário em Python com clear()

O método clear() remove todos os elementos de um dicionário, resultando em um dicionário vazio:

meu_dicionario = {"nome": "Fernando", "idade": 35}
meu_dicionario.clear()

print(meu_dicionario)

# output: {}
Testar

Criar uma cópia de um dicionário em Python com copy()

O método copy() cria uma cópia independente de um dicionário. Assim, você consegue manipular e modificar o dicionário copiado sem alterar o original:

meu_dicionario = {"nome": "Gustavo", "idade": 29}
copia_dicionario = meu_dicionario.copy()

print(copia_dicionario)

# output: {'nome': 'Gustavo', 'idade': 29}

copia_dicionario["idade"] = 30

print(copia_dicionario)

# output: {'nome': 'Gustavo', 'idade': 30}

print(meu_dicionario)

# output: {'nome': 'Gustavo', 'idade': 29}
Testar

Obter todas as chaves de um dicionário com o método keys()

O método keys() é usado para obter todas as chaves de um dicionário:

meu_dicionario = {"nome": "Eva", "idade": 24, "profissão": "Engenheira"}

chaves = meu_dicionario.keys()
print(list(chaves))

# output: ['nome', 'idade', 'profissão']
Testar

Obter todos os valores de um dicionário com o método values()

Para obter todos os valores de um dicionário, utilize o método values():

meu_dicionario = {"nome": "Eva", "idade": 24, "profissão": "Engenheira"}

valores = meu_dicionario.values()
print(list(valores))

# output: ['Eva', 24, 'Engenheira']
Testar

Obter todos os pares chave-valor de um dicionário com o método items()

O método items() pode ser usado para retornar tuplas contendo cada par chave-valor do dicionário:

meu_dicionario = {"nome": "Eva", "idade": 24, "profissão": "Engenheira"}

itens = meu_dicionario.items()
print(list(itens))

# output: [('nome', 'Eva'), ('idade', 24), ('profissão', 'Engenheira')]
Testar

O que os métodos dict.keys(), dict.values() e dict.items() retornam?

Os métodos de dicionários dict.keys(), dict.values() e dict.items() retornam objetos chamados de views. Uma view de um dicionário é semelhante a uma lista, porém não são exatamente iguais: não podemos pegar um elemento de uma view pelo seu índice, por exemplo.

A principal utilidade de uma view de dicionário é que elas permanecem atualizadas com o dicionário de origem: se criarmos uma variável contendo uma view de dicionário, qualquer alteração que fizermos no dicionário original se refletirá na view automaticamente.

Diferença entre listas e dicionários em Python

Ao lado dos dicionários, as listas de Python são um outro tipo de dado essencial para conhecermos quando estamos aprendendo sobre a linguagem.

Tanto as listas quanto os dicionários são classificados como containers (ou coleções) de dados em Python. Isso significa que eles podem conter diversos valores dentro de si. Dessa forma, a principal diferença entre listas e dicionários em Python diz respeito a como armazenamos e acessamos seus dados.

As listas armazenam dados em uma ordem específica e os acessamos usando índices numéricos:

nomes = ["João", "Pedro", "Maria"]
primeiro_nome = nomes[0]  # Pegando o elemento de índice 0 
Testar

Por outro lado, os dicionários armazenam dados como pares chave-valor sem ordem explícita, e os acessamos usando as chaves:

pessoa = {"nome": "Paulo", "idade": 29, "filhos": ["João", "Maria"]}
nome_pessoa = pessoa["nome"]  # pegando o valor associado à chave "nome"
Testar

Isso significa que não faz sentido buscar pelo “primeiro” ou “último” valor de um dicionário em Python, pois eles não possuem ordem da mesma forma como em listas.

Em decorrência dessa diferença entre listas e dicionários em Python, o tipo de erro exibido quando se acessa um elemento inexistente é específico para cada tipo de dado. Listas emitem um IndexError (erro de índice) quando acessamos valores além do tamanho da lista, enquanto dicionários emitem um KeyError (erro de chave) quando buscamos por uma chave inexistente.

Em muitos casos, quando não sabemos exatamente o tipo de dado com que estamos trabalhando, conseguimos diferenciar listas de dicionários apenas prestando atenção no tipo de erro que recebemos.

Como listar valores de um dicionário

Frequentemente, podemos querer listar todos os valores que existem dentro de um dicionário, isto é, passá-los para dentro de uma lista. Isso é bastante útil caso nosso objetivo seja ordenar os valores e pegar o primeiro ou último elemento, por exemplo, já que os dicionários em si não possuem ordem.

Se tentarmos passar o dicionário para a função list() (função responsável por converter qualquer tipo de dado em uma lista), obtemos uma lista das chaves do dicionário:

funcionario = {"nome": "Pedro", "sobrenome": "Silva", "salario": 6500}
print(list(funcionario))

# output:
# ['nome', 'sobrenome', 'salario']
Testar

Se, em vez disso, desejarmos listar os valores de um dicionário, temos que usar o método de dicionários dict.values() e passá-lo para a função list():

funcionario = {"nome": "Pedro", "sobrenome": "Silva", "salario": 6500}
print(list(funcionario.values()))

# output:
# ['Pedro', 'Silva', 6500]
Testar

Por outro lado, se quisermos listar tanto as chaves quanto seus valores associados, passamos o método dict.items() para a função list(). Nesse caso, cada par chave-valor aparece como uma tupla dentro da lista resultante:

funcionario = {"nome": "Pedro", "sobrenome": "Silva", "salario": 6500}
print(list(funcionario.items()))

# output:
# [('nome', 'Pedro'), ('sobrenome', 'Silva'), ('salario', 6500)]
Testar

Para finalizar, existe também o método de dicionários dict.keys(), porém o efeito de passá-lo para a função list() é idêntico a passar o dicionário em si:

# Mesma coisa que o primeiro exemplo!
funcionario = {"nome": "Pedro", "sobrenome": "Silva", "salario": 6500}
print(list(funcionario.keys()))

# output:
# ['nome', 'sobrenome', 'salario']
Testar

Como percorrer um dicionário

Para percorrer um dicionário, podemos usar os mesmos métodos dict.keys(), dict.values() e dict.items() junto a um for loop para iterar sobre os elementos do dicionário.

Os elementos gerados pelo for loop dependem do método utilizado: se usarmos o método dict.keys(), iremos percorrer pelas chaves do dicionário; com o método dict.values(), iteramos sobre os valores; e quando usamos dict.items(), geraremos tuplas de cada par chave-valor.

Veja o resultado quando percorremos um dicionário com cada um dos métodos:

funcionario = {"nome": "Pedro", "sobrenome": "Silva", "salario": 6500}


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

# output:
# Chave -> nome
# Chave -> sobrenome
# Chave -> salario


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

# output:
# Chave -> Pedro
# Chave -> Silva
# Chave -> 6500


# Iterando sobre pares chave-valor
for chave, valor in funcionario.items():
    print(f'Chave "{chave}" associada ao valor "{valor}"')

# output:
# Chave "nome" associada ao valor "Pedro"
# Chave "sobrenome" associada ao valor "Silva"
# Chave "salario" associada ao valor "6500"
Testar

Repare que, na última iteração com funcionario.items(), fizemos um desempacotamento de tuplas para extrair a chave e valor para variáveis individuais. Podemos fazer isso porque sabemos que o método dict.items() sempre gera tuplas de dois elementos (a chave e seu valor associado).

Como transformar uma lista em um dicionário

E se quisermos fazer o caminho contrário? Para transformar uma lista em um dicionário, geralmente iniciamos com um dicionário vazio. Em seguida, percorremos a lista com um for loop e adicionamos os pares chave-valor no dicionário, de acordo com alguma lógica desejada.

Por exemplo, se tivermos uma lista de palavras e quisermos gerar um dicionário em que a chave é a própria palavra e o valor é o tamanho da palavra, podemos executar o seguinte código:

palavras = ["python", "asimov", "academy", "cursos", "projetos"]
dict_palavras = {}

for palavra in palavras:
    tamanho_palavra = len(palavra)
    dict_palavras[palavra] = tamanho_palavra

print(dict_palavras)

# output:
# {'python': 6, 'asimov': 6, 'academy': 7, 'cursos': 6, 'projetos': 8}
Testar

Como podemos ver, o dicionário dict_palavras contém o resultado desejado.

Como juntar duas listas em um dicionário

E se tivermos duas listas que queremos juntar em um único dicionário? Por exemplo, podemos querer juntar a lista pessoas com a lista idades, criando um dicionário a partir das duas listas. Nesse dicionário, o nome de cada pessoa ficaria associado à sua respectiva idade.

Nesse caso, podemos usar a função zip() para iterar sobre as listas lado a lado. Veja o exemplo abaixo:

pessoas = ["Marcos", "Ricardo", "Ana"]
idades = [23, 35, 29]

dict_pessoas = {}

for nome, idade in zip(pessoas, idades):
    dict_pessoas[nome] = idade

print(dict_pessoas)

# output:
# {'Marcos': 23, 'Ricardo': 35, 'Ana': 29}
Testar

Com o código acima, conseguimos iterar sobre as duas listas lado a lado. Assim, conseguimos associar cada chave a seu respectivo valor dentro do for loop. Após a iteração, o dicionário dict_pessoas possui exatamente a informação desejada. Sucesso!

Conclusão

Os dicionários em Python são um tipo de dado extremamente útil e poderoso, que permite armazenar dados na forma de pares chave-valor. Eles são mutáveis, o que significa que você pode adicionar, remover e atualizar valores depois de criá-los. Neste artigo, aprendemos a manipular dicionários e realizar todas essas ações. Também abordamos as diferenças entre listas e dicionários e entendemos as diferentes formas que temos para percorrer um dicionário.

Se você quiser aprender mais sobre Python, recomendamos assistir ao Python MasterClass, o curso gratuito de Python da Asimov Academy que te leva do zero ao seu primeiro webapp em menos de duas horas!

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial