No Python, dicionários são coleções mutáveis e não ordenadas de pares chave-valor, em que cada chave é um elemento exclusivo que identifica um item de dado; o valor e servem, assim com as tuplas, os dicionários são úteis para armazenar dados heterogêneos.
Dicionários são estruturas dinâmicas, por tanto, podemos adicionar novos pares de chave-valor a qualquer momento, bastando fornecer o nome do dicionário, seguido pela nova chave entre colchetes e o valor novo.
Dicionários em Python, diferente de listas, não usam índices numéricos. Em vez disso, eles usam chaves para acessar valores. Portanto, você não pode acessar itens de um dicionário usando índices como em uma lista. Para acessar um valor em um dicionário, você deve usar a chave associada a esse valor.
Exemplo de um dicionário chamado notas, e terá duas chaves representando dois alunos,
aluno1 e aluno2, com seus respectivos valores (notas) sendo o aluno1 nota = 5 e aluno2 nota = 8
notas = {'aluno1': 5, 'aluno2': 8}
print(notas)
Veja no exemplo acima que um dicionário em Python nada mais é do que uma coleção de pares chave-valor, sendo que cada chave está vinculada a um valor, e podemos usar uma chave para acessar o valor associado a essa chave conforme associamos as notas aos alunos.
Valores em dicionários
Em Python, um dicionário é envolto entre chaves { }, com uma série de pares chave-valor dentro das chaves conforme mostrado anteriormente.
Os valores em um dicionário podem ser:
✅ Número
✅ String
✅ Lista
✅ Dicionários
✅ Ou outro qualquer objeto criado em Python podemos utilizar como valor em um dicionário.
Ao fornecer uma chave, Python retorna o valor associado a essa chave.
Chave em dicionário
Cada chave é vinculada ao seu valor por dois pontos e os pares chave-valor são separados por vírgulas e podemos adicionar quantos pares chave-valor quisermos em um dicionário.
Acessando valores em um dicionário
Para acessar os valores de um dicionário, é necessário informar o nome do dicionário.
Conforme no exemplo anterior, print(notas) para mostrar o dicionário inteiro.
Para acessar a nota do aluno2 por exemplo, devemos especificar a chave que queremos visualizar:
notas = {'aluno1': 5, 'aluno2': 8}
print(notas['aluno2'])
Utilizando chaves entre colchetes para acessar o valor que estamos procurando, pode ocassionar um erro se a chave solicitada, não existir.
Para deixar nossa pesquisa mais assertiva, podemos utilizar o método get() para definirmos um valor padrão que será retornado se a chave solicitada não existir.
🟫 Método get()
exige uma chave como primeiro argumento. Como segundo argumento opcional, podemos passar o valor a ser retornado caso a chave solicitada não exista não dicionário.
notas = {'aluno1': 5, 'aluno2': 8}
variavel = notas.get('aluno1', 'Chave não existe')
print(variavel)
Neste exemplo acima, a chave aluno1 existe, por tanto, a saída será 5, mas se eu colocasse 'aluno3' no lugar de 'aluno1' utilizando o método get, a saída seria Chave não existe.
Atribuir o valor de uma chave específica a uma variável
notas = {'aluno1': 5, 'aluno2': 8}
variavel = notas['aluno2']
print(variavel)
Alterar valores em um dicionário
No script abaixo, mostra o dicionário notas com aluno1 com nota 5, e logo abaixo, altero o valor da nota do aluno1 de 5 para 6, e posteriormente imprimo o dicionário novamente para checar o valor alterado.
notas = {'aluno1': 5, 'aluno2': 8}
notas['aluno1'] = '6'
print(notas)
Saída: {'aluno1': '6', 'aluno2': 8}
Removendo valores em um dicionário
Quando precisamos remover um valor, removemos a chave e valor junto, utilizando del, e informo ao Python qual é a chave que desejo excluir. A exclusão é feita permanentemente, não tem como reverter após exclusão.
notas = {'aluno1': 5, 'aluno2': 8}
del notas['aluno1']
print(notas)
Saída: {'aluno2': 8}
Percorrendo todos os pares chave-valor com um loop e o método items()
Para percorrer um dicionário com um loop for criarei abaixo duas variáveis chamada valor e chave, e um dicionário de um usuário que se chamará user_0
user_0 = {
'username': 'amandan',
'primeironome': 'amanda',
'ultimonome': 'nascimento'
}
for chave, valor in user_0.items():
print(f"\nChave: {chave}")
print(f"Valor: {valor}")
Saída:
Chave: username
Valor: amandan
Chave: primeironome
Valor: amanda
Chave: ultimonome
Valor: nascimento
Podemos usar quaisquer nome para as variáveis que nomeei como chave e valor.
A segunda metade da instrução for inclui o nome do dicionário seguido pelo método items, que retornará uma sequência de pares chave-valor.
Em seguida, o loop for atribui cada um desses pares às duas variáveis fornecidas (utilizei o nome chave e valor como nome das variáveis).
🟫 Método keys
Retorna uma vista de todas as chaves no dicionário.
alunos = {
'aluno1': 7,
'aluno2': 5,
'aluno3': 3,
'aluno4': 9
}
for nome in alunos.keys():
print(nome.title())
Saída:
Aluno1
Aluno2
Aluno3
Aluno4
Outro exemplo:
notas = {'aluno1': 5, 'aluno2': 8}
chaves = notas.keys() print(chaves)
# Saída: dict_keys(['aluno1', 'aluno2'])
🟫 Método values
Retorna uma vista de todos os valores no dicionário.
notas = {'aluno1': 5, 'aluno2': 8}
valores = notas.values()
print(valores)
# Saída: dict_values([5, 8])
🟫 Método update
Atualiza o dicionário com pares (chave, valor) de outro dicionário ou de um iterável de pares (chave, valor).
notas = {'aluno1': 5, 'aluno2': 8}
novas_notas = {'aluno3': 7, 'aluno2': 10}
notas.update(novas_notas)
print(notas) # Saída: {'aluno1': 5, 'aluno2': 10, 'aluno3': 7}
🟫 Método pop
Remove a chave especificada e retorna o valor correspondente. Se a chave não for encontrada, pode retornar um valor padrão ou gerar um erro.
notas = {'aluno1': 5, 'aluno2': 8}
# Remover chave existente
valor = notas.pop('aluno2')
print(valor) # Saída: 8
print(notas) # Saída: {'aluno1': 5}
# Remover chave inexistente com valor padrão
valor = notas.pop('aluno3', 'Chave não existe')
print(valor) # Saída: Chave não existe
🟫 Método popitem
Remove e retorna um par (chave, valor) arbitrário do dicionário. Útil para implementar algoritmos de pilha (LIFO).
notas = {'aluno1': 5, 'aluno2': 8}
item = notas.popitem()
print(item) # Saída: ('aluno2', 8) ou ('aluno1', 5) dependendo da versão do Python
print(notas) # Saída: {'aluno1': 5} ou {}
🟫 Método clear
Remove todos os itens do dicionário.
notas = {'aluno1': 5, 'aluno2': 8}
notas.clear()
print(notas) # Saída: {}
🟫 Método copy
Retorna uma cópia rasa (shallow copy) do dicionário.
notas = {'aluno1': 5, 'aluno2': 8}
copia_notas = notas.copy()
print(copia_notas) # Saída: {'aluno1': 5, 'aluno2': 8}
🟫 Método fromkeys
Cria um novo dicionário com chaves a partir de um iterável e valores definidos para um valor padrão.
chaves = ['aluno1', 'aluno2', 'aluno3']
valor_padrao = 0
novo_dict = dict.fromkeys(chaves, valor_padrao)
print(novo_dict) # Saída: {'aluno1': 0, 'aluno2': 0, 'aluno3': 0}
Dicionário dentro de uma lista
A utilização de dicionários dentro de uma lista em Python oferece várias vantagens,
especialmente quando você trabalha com coleções de dados estruturados e heterogêneos.
É uma forma poderosa e prática de organizar dados estruturados e trabalhar com eles de maneira eficiente!
No exemplo abaixo, dentro de uma única lista [ ], contem diversos (3) dicionários:
Acessar um dicionário específico na lista:
Use o índice da lista para acessar o dicionário correspondente.
print(restaurantes[0]) # {'nome': 'Praça', 'categoria': 'Japonesa', 'ativo': False}
Acessar um valor específico de um dicionário:
Após acessar o dicionário, use a chave para obter o valor.
print(restaurantes[0]['nome']) # 'Praça'
print(restaurantes[1]['ativo']) # True
Filtrar restaurantes ativos:
Use uma compreensão de lista para selecionar apenas os restaurantes com 'ativo': True.
ativos = [r for r in restaurantes if r['ativo']]
print(ativos)
# [{'nome': 'Pizza Suprema', 'categoria': 'Pizza', 'ativo': True}]
Atualizar um valor em um dicionário:
Modifique diretamente os valores usando índices e chaves.
restaurantes[2]['ativo'] = True
print(restaurantes[2])
# {'nome': 'Cantina', 'categoria': 'Italiano', 'ativo': True}
Vantagens em utilizar dicionários em uma lista
✔ Organização e Estruturação de Dados
Cada dicionário pode representar um item ou entidade com várias propriedades (chave-valor).
Isso permite que você organize dados complexos de maneira mais compreensível.
clientes = [
{"nome": "João", "idade": 30, "cidade": "São Paulo"},
{"nome": "Maria", "idade": 25, "cidade": "Rio de Janeiro"},
{"nome": "Carlos", "idade": 35, "cidade": "Belo Horizonte"}
]
Aqui, cada cliente é representado como um dicionário, e todos eles são armazenados em uma lista.
✔ Flexibilidade para Trabalhar com Dados Heterogêneos
Como os dicionários podem armazenar diferentes tipos de valores (strings, números, listas, etc.), é fácil representar dados variados.
estoque = [
{"produto": "Cadeira", "quantidade": 10, "cores": ["preto", "azul"]},
{"produto": "Mesa", "quantidade": 5, "cores": ["marrom"]},
]
✔ Acesso Fácil a Propriedades Específicas
É simples acessar as propriedades específicas de um item com base nas chaves do dicionário.
for cliente in clientes:
print(cliente["nome"]) # Acessa o nome de cada cliente
✔ Facilidade de Filtragem e Pesquisa
É fácil realizar pesquisas e filtros na lista com base nos valores das chaves do dicionário.
# Filtrar clientes com idade maior que 30
clientes_mais_velhos = [c for c in clientes if c["idade"] > 30]
✔ Escalabilidade
Essa estrutura é escalonável para um número maior de itens e atributos, especialmente em situações onde os atributos podem variar entre os itens.
# Adicionando um novo cliente com mais propriedades
clientes.append({"nome": "Ana", "idade": 28, "cidade": "Curitiba", "vip": True})
✔ Compatibilidade com JSON
Dicionários dentro de listas são uma estrutura muito semelhante ao formato JSON, amplamente utilizada para troca de dados em APIs e serviços web.
import json
print(json.dumps(clientes, indent=4)) # Converte a lista de dicionários para JSON formatado
✔ Processamento e Manipulação Simplificada
É fácil realizar operações como agrupamento, atualização de valores e adição de novos itens diretamente nos dicionários.
# Atualizar a cidade de João
for cliente in clientes:
if cliente["nome"] == "João":
cliente["cidade"] = "Campinas"