08. Dicionários#
O objetivo de aprendizado deste handout é que, ao final da atividade, você seja capaz de utilizar dicionários em seus programas em conjunto com as estruturas que vimos nas aulas anteriores (input
, if
, while
, for
, list
, etc.). Vamos começar com um aquecimento.
Exemplo com listas#
Exercise 1
Answer
Os valores armazenados na lista do código acima, representam dados de contatos telefônicos.
A lista é composta de outras lista de tamanho 2
. E podemos perceber que o primeiro valor destas listas menores, armazena o nome do contato e o segundo valor armazena o número do telefone.
Exercise 2
Answer
O código acima, percorre a lista de contatos telefônicos. A cada iteração do comandofor
a variável nome_e_telefone
representará a lista ['NOME','NÚMERO DE TELEFONE']
. Desta forma, o código nome_e_telefone[0]
representa o valor de interesse que é o nome do contato.
Exercise 3
Answer
O código acima funciona como um agenda telefônica, onde o usuário informa um nome e o programa imprime as informações deste contato.
Agenda Telefônica
#
Vamos entender melhor o que o código abaixo funciona faz:
lista = [
["Fulano", "99999-1111"],
["Sicrano", "99999-2222"],
["Beltrano", "99999-3333"]
]
nome_selecionado = input("Digite um nome: ")
for nome_e_telefone in lista:
nome = nome_e_telefone[0]
if nome == nome_selecionado:
telefone = nome_e_telefone[1]
print("Telefone de {0} é: {1}".format(nome, telefone))
- Começamos o código criando uma lista na qual cada elemento é uma outra lista contendo dois elementos. O primeiro desses elementos é sempre um nome e o segundo é sempre o seu respectivo telefone;
- O usuário digita um nome;
- Para cada elemento
nome_e_telefone
dalista
repetimos o bloco a seguir (note que a variávelnome_e_telefone
sempre vai guardar uma lista com exatamente dois elementos, o nome e o telefone): - Armazenamos o primeiro elemento (o nome) de
nome_e_telefone
em uma variávelnome
; - Se o nome for igual ao nome digitado pelo usuário executamos o bloco a seguir:
- Armazenamos o segundo elemento (o telefone) de
nome_e_telefone
em uma variáveltelefone
; - Imprimimos o
telefone
da pessoa selecionada
- Armazenamos o segundo elemento (o telefone) de
Importante
Mesmo depois de imprimir o telefone da pessoa selecionada, o código continua percorrendo os próximos elementos da lista até o fim.
Acabamos de implementar uma lista de contatos!
No código acima, não seria mais fácil se eu pudesse acessar elementos de uma lista utilizando palavras ao invés de números (índices)? Assim eu poderia acessar, por exemplo, o telefone de "Fulano"
com o código lista["Fulano"]
ao invés de ter que procurar por todos os elementos da lista. Para isso temos os dicionários!
Dicionários#
Um dicionário pode armazenar uma quantidade arbitrária de elementos, assim como uma lista. A diferença é que não estamos limitados a utilizar números como os índices, em dicionários podemos indexar os elementos por quase qualquer coisa (floats, strings, etc.)! No exemplo da lista de contatos, poderíamos ter ao invés de uma lista de nomes e telefones indexados por números, uma lista de telefones indexada por nomes:

O problema disso é que na lista a posição de cada elemento está claramente associada a um número: o primeiro elemento da lista é o 0
, o segundo é o 1
, o terceiro é o 2
e assim por diante. No dicionário essa associação entre o índice (no exemplo, o nome) e a localização de um valor (o telefone) não é igualmente clara. Independente da ordem dos elementos no dicionário queremos utilizar os nomes para acessar os telefones. Por isso, ao criar um dicionário precisamos ser explícitos sobre qual é o "índice" de cada valor adicionado. Fazemos isso utilizando o seguinte código (ainda utilizando o exemplo acima):
A princípio pode parecer um pouco assustador, mas não se preocupe, com um pouco de prática você vai se acostumar. Vamos entender o que a linha acima está fazendo. Assim como definimos listas utilizando os colchetes []
, os dicionários são definidos com chaves {}
. Então definimos os pares de "índice" e valor do elemento separados por dois pontos (":
").
Exercise 4
Answer
Utilizamos as chaves {}
para definir um dicionário em Python.
Chaves e valores#
Talvez você tenha reparado que utilizamos aspas quando nos referíamos aos "índices" do dicionário. Na verdade, no dicionário chamamos os índices de chaves (em inglês: "keys") e os elementos armazenados de valores (em inglês: "values"). Vimos também que as chaves e valores estão associados. Esse par chave-valor é chamado de item (em inglês... também é "item"). Por exemplo, em:
As chaves são 'Sicrano'
e 'Beltrano'
, os valores são 18
e 20
e os itens são ('Sicrano', 18)
e ('Beltrano', 20)
.
Exercise 5
Answer
As chaves são os valores "Fulano"
, "Sicrano"
e "Beltrano"
que estão a esquerda dos dois-pontos :
.
Exercise 6
Answer
Os valores do dicionário são "99999-1111"
, "99999-2222"
e "99999-3333"
que estão a direita dos dois-pontos :
.
Exercise 7
Answer
Os itens são os pares de valores "Fulano": "99999-1111"
, "Sicrano": "99999-2222"
e "Beltrano": "99999-3333"
.
Acessando valores em um dicionário#
Vimos que podemos criar um dicionário colocando os pares de chaves e valores entre {
e }
. Para acessa um valor em uma determinada chave utilizamos o mesmo formato utilizado em listas. No nosso exemplo, dicionario['Sicrano']
devolve o valor armazenado na chave 'Sicrano'
, ou seja, '99999-2222'
.
Exercise 8
Exercise 9
Answer
contato_telefonico = {
"Fulano": "99999-1111",
"Sicrano": "99999-2222",
"Beltrano": "99999-3333"
}
nome_selecionado = input("Digite um nome: ")
telefone = contato_telefonico[nome_selecionado]
print("Telefone de {0} é: {1}".format(nome_selecionado, telefone))
for
, pois basta utilizar o código contato_telefonico[nome_selecionado]
para acessar as informações do contato desejado.
Você conseguiu identificar o problema das outras alternativas?
Exercise 10
Exercise 11
Inicialização de dicionários#
Vamos ver a inicialização de dicionários. Clique aqui