S04 - Atividade de Aprendizagem (2 de 2): Dicionários
Nesta aula, você aprenderá como armazenar e recuperar dados de dicionários Python. Você também aprenderá a escrever um loop que processa todos os itens de um dicionário.
Vídeo
Assista a este vídeo sobre dicionários Python até o minuto 6:31. Se desejar, você pode assistir ao restante.
Link direto: Dicionários
Conceitos
Aqui estão os conceitos e assuntos de programação em Python que você deve aprender durante esta aula:
Dicionários
Um programa Python pode armazenar muitos itens em um dicionário. Cada item em um dicionário é um par de chave-valor. Cada chave dentro de um dicionário deve ser única. Isso significa que nenhuma chave pode aparecer mais de uma vez em um dicionário mas os valores dentro de um dicionário não precisam ser únicos. Os dicionários são mutáveis, então podem ser alterados depois de serem criados. Os dicionários foram inventados para permitir que os computadores encontrassem itens rapidamente.
A tabela a seguir representa um dicionário que contém cinco itens (cinco pares de chave-valor). Observe que cada uma das chaves é única.
| itens | ||
|---|---|---|
| chaves | valores | |
| 42-039-4736 | Carlos Silva | ↑ |
| 61-315-0160 | Eliane Andrade | | |
| 10-450-1203 | Carolina Barbosa | 5 itens |
| 75-421-2310 | Renato Freitas | | |
| 07-103-5621 | Eliane Andrade | ↓ |
Podemos criar um dicionário usando chaves ({ e }). Também podemos adicionar um item a um dicionário e encontrar um item em um dicionário usando colchetes ([ e ]) e uma chave. O exemplo de código a seguir mostra como criar um dicionário, bem como adicionar, remover e pesquisar um item em um dicionário.
# Exemplo 1
def main():
# Cria um dicionário com números de identificação dos estudantes como
# as chaves e os nomes dos estudantes como valores.
dic_de_estudantes = {
"42-039-4736": "Carlos Silva",
"61-315-0160": "Eliane Andrade",
"10-450-1203": "Carolina Barbosa",
"75-421-2310": "Renato Freitas",
"07-103-5621": "Eliane Andrade"
}
# Adiciona um item ao dicionário.
dic_de_estudantes["81-298-9238"] = "Samuel Pires"
# Remove um item do dicionário.
dic_de_estudantes.pop("61-315-0160")
# Obtém o número de itens no dicionário.
comprimento = len(dic_de_estudantes)
print(f"comprimento: {comprimento}")
# Exibe o dicionário inteiro.
print(dic_de_estudantes)
print()
# Obtém um número de identificação de estudante do usuário.
id = input("Digite um número de identificação de estudante: ")
# Verifica se o número de identificação do estudante está no dicionário.
if id in dic_de_estudantes:
# Encontra o número de identificação do estudante no dicionário e
# recupera o nome do estudante correspondente.
nome = dic_de_estudantes[id]
# Exibe o nome do estudante.
print(nome)
else:
print("Estudante inexistente")
# Chama main para iniciar este programa.
if __name__ == "__main__":
main()
> python exemplo_1.py
comprimento: 5
{'42-039-4736': 'Carlos Silva', '10-450-1203': 'Carolina Barbosa',
'75-421-2310': 'Renato Freitas', '07-103-5621': 'Eliane Andrade',
'81-298-9238': 'Samuel Pires'}
Digite um número de identificação de estudante: 10-450-1203
Carolina Barbosa
A linha 13 do exemplo de código anterior adiciona um item ao dicionário. Para adicionar um item a um dicionário existente, escreva um código que siga este modelo:
nome_do_dicionario[chave] = valor
Observe que a linha 13 segue este modelo.
A linha 25 do exemplo de código anterior usa o operador de associação Python, que é a palavra-chave in, para verificar se uma chave está armazenada em um dicionário. Para verificar se uma chave está armazenada em um dicionário, escreva um código que siga este modelo:
if chave in nome_do_dicionario:
Observe que a linha 25 segue este modelo.
A linha 28 do exemplo de código anterior encontra uma chave e recupera seu valor correspondente de um dicionário. Para encontrar uma chave e recuperar seu valor correspondente, escreva um código que siga este modelo:
valor = nome_do_dicionario[chave]
Observe que a linha 28 segue este modelo.
Valores Compostos
Um valor simples é um valor que não contém partes, por exemplo, um inteiro. Um valor composto é um valor que tem partes, como uma lista. No exemplo 1 acima, o dicionário dos estudantes tem chaves e valores simples. Cada chave é uma única string, e cada valor é uma única string. É possível armazenar valores compostos em um dicionário. O exemplo 2 mostra um dicionário de estudantes em que cada valor é uma lista Python. Como cada lista contém várias partes, dizemos que o dicionário armazena valores compostos.
# Exemplo 2
def main():
# Cria um dicionário com números de identificação dos estudantes como chaves
# e dados dos estudantes armazenados em uma lista como valores.
dic_de_estudantes = {
# ID_do_estudante: [nome, sobrenome, endereço de e-mail, créditos]
"42-039-4736": ["Carlos", "Silva", "sil20001@byui.edu", 16],
"61-315-0160": ["Maria", "Oliveira", "oli21002@byui.edu", 3],
"10-450-1203": ["Ana", "Soares", "soa22005@byui.edu", 15],
"75-421-2310": ["João", "Pereira", "per20003@byui.edu", 5],
"07-103-5621": ["Maria", "Oliveira", "oli19008@byui.edu", 0]
}
Como Encontrar Um Item
Os dicionários Python foram desenvolvidos com a finalidade de tornar a localização de itens fácil e rápida. Como explicado no exemplo 1, para encontrar um item em um dicionário, um programador precisa escrever apenas uma linha de código que segue este modelo:
valor = nome_do_dicionario[chave]
Essa linha de código fará com que o computador pesquise no dicionário até encontrar a chave. Então o computador retornará o valor que corresponde à chave. Alguns programadores esquecem como é fácil encontrar itens em um dicionário e, quando solicitados a criar código para encontrar um item, eles escrevem código complexo, como as linhas 21 a 24 do exemplo 3.
# Exemplo 3
def main():
# Cria um dicionário com números de identificação dos estudantes como chaves
# e dados dos estudantes armazenados em uma lista como valores.
dic_de_estudantes = {
# ID_do_estudante: [nome, sobrenome, endereço de e-mail, créditos]
"42-039-4736": ["Carlos", "Silva", "sil20001@byui.edu", 16],
"61-315-0160": ["Maria", "Oliveira", "oli21002@byui.edu", 3],
"10-450-1203": ["Ana", "Soares", "soa22005@byui.edu", 15],
"75-421-2310": ["João", "Pereira", "per20003@byui.edu", 5],
"07-103-5621": ["Maria", "Oliveira", "oli19008@byui.edu", 0]
}
# Obtém um número de identificação de estudante do usuário.
id = input("Digite um número de identificação de estudante: ")
# Esta maneira é difícil e lenta de encontrar um item em um
# dicionário. Não escreva código assim para encontrar um item
# em um dicionário!
# Para cada item do dicionário, verifica se
# sua chave é a mesma que a id da variável.
estudante = None
for chave, valor in dic_de_estudantes.items(): # Exemplo de código incorreto!
if chave == id: # Não use um loop
estudante = valor # assim para encontrar um
break # item em um dicionário.
Compare o loop for nas linhas 21–24 do exemplo anterior com esta linha de código.
valor = dic_de_estudantes[id]
Claramente, escrever uma linha de código é mais fácil para um programador do que escrever o loop for. Não só a linha de código é mais fácil de escrever, mas o computador a executará muito, muito mais rápido do que o loop for. Portanto, quando você precisar escrever código para encontrar um item em um dicionário, não escreva um loop. Em vez disso, escreva uma linha de código que use colchetes ([ e ]) e uma chave para encontrar um item. O exemplo 4 mostra a maneira correta de encontrar um item em um dicionário.
# Exemplo 4
def main():
# Cria um dicionário com números de identificação dos estudantes como chaves
# e dados dos estudantes armazenados em uma lista como valores.
dic_de_estudantes = {
# ID_do_estudante: [nome, sobrenome, endereço de e-mail, créditos]
"42-039-4736": ["Carlos", "Silva", "sil20001@byui.edu", 16],
"61-315-0160": ["Maria", "Oliveira", "oli21002@byui.edu", 3],
"10-450-1203": ["Ana", "Soares", "soa22005@byui.edu", 15],
"75-421-2310": ["João", "Pereira", "per20003@byui.edu", 5],
"07-103-5621": ["Maria", "Oliveira", "oli19008@byui.edu", 0]
}
# Estes são os índices dos elementos nas listas de valores.
INDICE_DE_NOME = 0
INDICE_DE_SOBRENOME = 1
INDICE_DE_EMAIL = 2
INDICE_DE_CREDITOS = 3
# Obtém um número de identificação de estudante do usuário.
id = input("Digite um número de identificação de estudante: ")
# Verifica se o número de identificação do estudante está no dicionário.
if id in dic_de_estudantes:
# Encontra a identificação do estudante no dicionário e
# recupera o valor correspondente, que é uma lista.
valor = dic_de_estudantes[id]
# Extrai da lista o nome e o sobrenome do estudante
nome = valor[INDICE_DE_NOME]
sobrenome = valor[INDICE_DE_SOBRENOME]
# Exibe o nome do estudante.
print(f"{nome} {sobrenome}")
else:
print("Estudante inexistente")
# Chama main para iniciar este programa.
if __name__ == "__main__":
main()
> python exemplo_4.py Digite um número de identificação de estudante: 61-315-0160 Eliane Andrade > python exemplo_4.py Digite um número de identificação de estudante: 25-143-1202 Estudante inexistente
Processando Todos os Itens
Ocasionalmente, você pode precisar escrever um programa que processe todos os itens de um dicionário. Processar todos os itens em um dicionário é diferente de encontrar um item em um dicionário. O processamento de todos os itens é feito usando um loop for e o método dict.items(), conforme mostrado na linha 21 do exemplo 5.
# Exemplo 5
def main():
# Cria um dicionário com números de identificação dos estudantes como chaves
# e dados dos estudantes armazenados em uma lista como valores.
dic_de_estudantes = {
"42-039-4736": ["Carlos", "Silva", "sil20001@byui.edu", 16],
"61-315-0160": ["Maria", "Oliveira", "oli21002@byui.edu", 3],
"10-450-1203": ["Ana", "Soares", "soa22005@byui.edu", 15],
"75-421-2310": ["João", "Pereira", "per20003@byui.edu", 5],
"07-103-5621": ["Maria", "Oliveira", "oli19008@byui.edu", 0],
"81-298-9238": ["Samanta", "Pascal", "pas21004@byui.edu", 8]
}
# Estes são os índices dos elementos nas listas de valores.
INDICE_DE_NOME = 0
INDICE_DE_SOBRENOME = 1
INDICE_DE_EMAIL = 2
INDICE_DE_CREDITOS = 3
total = 0
# Para cada item da lista, adicione o número
# de créditos que o estudante obteve.
for item in dic_de_estudantes.items():
chave = item[0]
valor = item[1]
# Recupera o número de créditos da lista de valores.
creditos = valor[INDICE_DE_CREDITOS]
# Soma o número de créditos ao total.
total += creditos
print(f"Total de créditos obtidos por todos os estudantes: {total}")
# Chama main para iniciar este programa.
if __name__ == "__main__":
main()
> python exemplo_5.py Total de créditos obtidos por todos os estudantes: 47
Assim como todo o código de exemplo no CSE 111, o exemplo 5 possui um código Python que funciona perfeitamente. Apesar disso, podemos reescrever as linhas 21 a 23 em uma única linha com o uso de um recurso chamado desempacotamento (em inglês, unpacking), da seguinte maneira:
for item in dic_de_estudantes.items():
chave = item[0]
valor = item[1]
Podemos escrever uma linha de código que combine as três linhas e descompacte o item na instrução for, assim:
for chave, valor in dic_de_estudantes.items():
O exemplo 6 contém o mesmo código do exemplo 5, exceto que o exemplo 6 usa o atalho de desempacotamento do Python na linha 21.
# Exemplo 6
def main():
# Cria um dicionário com números de identificação dos estudantes como chaves
# e dados dos estudantes armazenados em uma lista como valores.
dic_de_estudantes = {
"42-039-4736": ["Carlos", "Silva", "sil20001@byui.edu", 16],
"61-315-0160": ["Maria", "Oliveira", "oli21002@byui.edu", 3],
"10-450-1203": ["Ana", "Soares", "soa22005@byui.edu", 15],
"75-421-2310": ["João", "Pereira", "per20003@byui.edu", 5],
"07-103-5621": ["Maria", "Oliveira", "oli19008@byui.edu", 0],
"81-298-9238": ["Samanta", "Pascal", "pas21004@byui.edu", 8]
}
# Estes são os índices dos elementos nas listas de valores.
INDICE_DE_NOME = 0
INDICE_DE_SOBRENOME = 1
INDICE_DE_EMAIL = 2
INDICE_DE_CREDITOS = 3
total = 0
# Para cada item da lista, adicione o número
# de créditos que o estudante obteve.
for chave, valor in dic_de_estudantes.items():
# Recupera o número de créditos da lista de valores.
creditos = valor[INDICE_DE_CREDITOS]
# Soma o número de créditos ao total.
total += creditos
print(f"Total de créditos obtidos por todos os estudantes: {total}")
# Chama main para iniciar este programa.
if __name__ == "__main__":
main()
> python exemplo_6.py Total de créditos obtidos por todos os estudantes: 47
Dicionários são Semelhantes a Listas
Os dicionários se parecem com listas em alguns aspectos. A tabela a seguir compara listas com dicionários e categoriza suas características como iguais, semelhantes ou diferentes.
| Listas | Dicionários | |
|---|---|---|
| Semelhante | Uma lista pode armazenar muitos elementos. | Um dicionário pode armazenar muitos itens. |
| Diferente | Os elementos em uma lista não precisam ser únicos. | Cada item em um dicionário é um par de chave-valor. Cada chave deve ser única dentro de um dicionário. Cada valor não precisa ser único. |
| As listas foram criadas para armazenar elementos de forma eficiente. Listas usam menos memória que dicionários. Entretanto, encontrar um elemento em uma lista é relativamente lento. | Os dicionários foram criados para encontrar itens rapidamente. No entanto, os dicionários usam mais memória do que as listas. | |
| Um programador usa colchetes ([ e ]) para criar uma lista. | Um programador usa chaves ({ e }) para criar um dicionário. | |
|
||
| Igual | Listas são mutáveis, ou seja, um programa pode adicionar e remover elementos depois que uma lista é criada. | Os dicionários são mutáveis, ou seja, um programa pode adicionar e remover itens depois que um dicionário é criado. |
| Diferente | Um programador chama os métodos insert e append para adicionar um elemento a uma lista.
|
Um programador usa colchetes ([ e ]) para adicionar um item a um dicionário. |
|
||
| Semelhante | Para fazer com que o computador verifique se um elemento está em uma lista, um programador usa a palavra-chave in. |
Para fazer com que o computador verifique se uma chave está em um dicionário, um programador usa a palavra-chave in. |
|
||
| Diferente | Um programador usa o método index para encontrar um elemento em uma lista. |
Um programador usa colchetes ([ e ]) e uma chave para encontrar um item em uma lista. |
|
||
| Semelhante | Um programador usa colchetes ([ e ]) e um índice para recuperar um elemento de uma lista. | Um programador usa colchetes ([ e ]) e uma chave para recuperar um valor de um dicionário. |
|
||
| Um programador usa colchetes ([ e ]) e um índice para substituir um elemento em uma lista. | Um programador usa colchetes ([ e ]) e uma chave para substituir um valor em um dicionário. | |
|
||
| Semelhante | Um programador pode usar um loop for para processar todos os elementos de uma lista. |
Um programador pode usar um loop for para processar todos os itens em um dicionário. |
|
||
| Igual | Um programador usa o método pop para remover um elemento de uma lista. |
Um programador usa o método pop para remover um item de um dicionário. |
|
||
| Listas são passadas por referência para uma função. | Os dicionários são passados por referência para uma função. | |
|
||
Conversão entre Listas e Dicionários
É possível converter duas listas em um dicionário usando as funções integradas zip e dict. O conteúdo da primeira lista se tornará as chaves no dicionário, e o conteúdo da segunda lista se tornará os valores. Isso implica que as duas listas devem ter o mesmo comprimento, e os elementos na primeira lista devem ser únicos porque as chaves em um dicionário devem ser únicas.
Também é possível converter um dicionário em duas listas usando os métodos keys e values e a função integrada list. O exemplo de código a seguir começa com duas listas, converte-as em um dicionário e, em seguida, converte o dicionário em duas listas.
# Exemplo 7
def main():
# Cria uma lista que contenha cinco números de estudantes.
lista_de_numeros = ["42-039-4736", "61-315-0160",
"10-450-1203", "75-421-2310", "07-103-5621"]
# Cria uma lista que contenha cinco nomes de estudantes.
lista_de_nomes = ["Carlos Silva", "Eliane Andrade",
"Carolina Barbosa", "Renato Freitas", "Eliane Andrade"]
# Converte as listas de números e nomes em um dicionário.
dic_de_estudantes = dict(zip(lista_de_numeros, lista_de_nomes))
# Exibe o dicionário completo de estudantes.
print("Dicionário:", dic_de_estudantes)
print()
# Converte o dicionário do estudante em
# duas listas chamadas chaves e valores.
chaves = list(dic_de_estudantes.keys())
valores = list(dic_de_estudantes.values())
# Exibe ambas as listas.
print("Chaves:", chaves)
print()
print("Valores:", valores)
# Chama main para iniciar este programa.
if __name__ == "__main__":
main()
> python exemplo_7.py
Dicionário: {'42-039-4736': 'Carlos Silva',
'61-315-0160': 'Eliane Andrade', '10-450-1203': 'Carolina Barbosa',
'75-421-2310': 'Renato Freitas', '07-103-5621': 'Eliane Andrade'}
Chaves: ['42-039-4736', '61-315-0160', '10-450-1203',
'75-421-2310', '07-103-5621']
Valores: ['Carlos Silva', 'Eliane Andrade', 'Carolina Barbosa',
'Renato Freitas', 'Eliane Andrade']
Resumo
Um dicionário em um programa Python pode armazenar muitas partes de dados chamados itens. Cada item é um par de chave-valor. Cada chave armazenada em um dicionário deve ser única. Os valores não precisam ser únicos. Para criar um dicionário, usamos chaves ({ e }). Já para adicionar um item e encontrá-lo em um dicionário, usamos colchetes ([ e ]) e uma chave. Por fim, para processar todos os itens em um dicionário, escrevemos um loop for each. Os dicionários foram inventados para permitir que um computador encontre itens muito rapidamente. Não escreva um loop for each para encontrar um item em um dicionário. Para encontrar um item em um dicionário, use colchetes ([ e ]) e uma chave.
Atividade
Finalidade
Melhorar sua capacidade de usar dicionários em um programa Python.
Documentação Útil
-
O conteúdo preparado da aula anterior explica como recuperar um elemento de uma lista.
-
O conteúdo de preparação desta aula explica como encontrar itens em um dicionário.
Tarefa
Escreva um programa que armazene informações sobre veículos em um dicionário Python. Seu programa deve solicitar que o usuário insira o número de identificação do veículo (também chamado de número do chassi), localizar esse número no dicionário e exibir o fabricante, o modelo e a cor do veículo. Faça o seguinte:
-
Baixe e salve o arquivo Python veiculos.py e depois abra-o no VS Code.
-
Usando o VS Code, leia os comentários no programa. Em seguida, substitua todas as três ocorrências da palavra-chave
passpelo código que faz o que os comentários descrevem. -
Execute seu programa e verifique se ele funciona corretamente.
Procedimento de Teste
Verifique se seu programa funciona corretamente seguindo cada etapa deste procedimento de teste:
-
Execute seu programa e digite as entradas mostradas abaixo. Certifique-se de que a saída do seu programa corresponda à saída abaixo.
> python veiculos.py Por favor, digite o chassi: 3FAHP0HA6AR000000 3FAHP0HA6AR000000 não está no dicionário. > python veiculos.py Por favor, digite o chassi: 9BWZZZ377VT004251 Volkswagen Gol prata
Exemplo de Solução
Quando terminar seu programa, consulte o exemplo de solução para comparar com o seu.
Primeiro, procure concluir o programa sem olhar o exemplo de solução. No entanto, se já tiver trabalhado nele por bastante tempo e ainda estiver com dificuldades, sinta-se à vontade para usá-lo como apoio para finalizar seu programa.
Envio
Quando terminar, reporte seu progresso no questionário do Canvas correspondente a esta atividade.
Links Úteis:
- Voltar para: Visão Geral da Semana | Página Inicial