Buscar

AulaDicionarios - Python Computação II - Engenharia Mecânica UFRJ

Prévia do material em texto

Dicionários
Definição
➲ Dicionários também são estruturas para armazenar dados, 
mas não são sequências porque não são indexados sequen-
cialmente da forma que strings, listas e tuplas são.
➲ Seus elementos são representados por pares (chave,valor)
➲ Seus sistema de endereçamento é por chaves. Cada chave 
tem um valor atribuído. Se você quer saber o valor de um di-
cionário, deve perguntar pelas chaves, não pelos endereços. 
Motivação
➲ Considere que queremos representar uma lista de aniversari-
antes com seus respectivos aniversários.
➲ Uma possível solução é ter uma lista de nomes e uma lista 
com os dias dos aniversários: 
● Dia do aniversário do nome[i] armazenado em 
aniversario[i]
➲ Para acrescentar “Ana” com aniversario “10/03”:
● nome.append('Ana')
● aniversario.append('10/03')
➲ Para encontrar o aniversário de Ana:
● niver = aniversario[nome.index('Ana')]
Motivação
➲ Dicionários tornam a representação muito mais fácil:
● Aniversario['Ana'] = '10/03'
● niver = aniversario['Ana']
➲ A chave precisa ser de um tipo imutável, geralmente são 
strings, mas podem ser tuplas ou tipos numéricos. Já o valor 
pode ser tanto mutável quanto imutável.
Sintaxe
➲ Dicionario = {chave1: valor1, chave2 : valor2,...}
➲ Exemplo:
● >>> ficha = { 'nome' : 'Carlos', 'profissão ' : 'engenheiro', 
'salário' : 7000}
>>> ficha
{'salário': 7000, 'profissão' : 'engenheiro', 'nome' : 'Carlos'}
➲ O dicionário não fornece garantia de que as chaves estarão 
ordenadas, mas a ordem em que os elementos aparecem não 
é importante, pois os valores são acessados somente através 
de suas respectivas chaves, e não de suas posições.
Sintaxe
➲ Para adicionar um novo par chave:valor :
>>> ficha['idade'] = 34
➲ Perceba que, diferentemente de listas, atribuir a um elemento 
de um dicionário não requer que a posição exista previa-
mente.
 >>> Lista = [] 
 >>> Lista [2] = 34 ERRADO
 >>> ficha = {}
 >>> ficha['idade'] = 34 OK
Sintaxe
➲ Para requisitar o valor atribuído a uma chave:
 >>> ficha['idade']
 34
➲ Dicionários são mutáveis.Para alterar o valor contido em uma 
chave:
 >>> ficha['sálario'] = 7200
 >>> ficha['salário']
 7200
 Mesma sintaxe da inserção! Não é inserida outra chave com o 
 mesmo nome e valor diferente, pois chaves são únicas!!
Alguns Métodos
➲ pop(chave) : Obtém o valor correspondente a chave e remove 
o par chave/valor do dicionário.
>>> ficha.pop('salário')
7200
>>> ficha
{'profissão ': 'engenheiro', 'idade': 34, 'nome': 'Carlos'}
➲ Popitem(): Retorna e remove um par chave/valor aleatório do
dicionário.
>>> ficha.popitem()
('profissão ', 'engenheiro')
>>> ficha
{'idade': 34, 'nome': 'Carlos'}
Alguns Métodos
➲ O del também pode ser usado para deletar do dicionário.
>>> ficha = {'nome':'Carlos,'idade':34}
>>> del ficha['idade']
>>> ficha
{'nome': 'carlos'}
➲ clear(): remove todos os elementos do dicionário.
>>> ficha.clear()
>>> ficha
{}
Alguns Métodos
➲ ficha = { 'nome' : 'Carlos', 'profissão ' : 'engenheiro', 
'salário' : 7200, 'idade': 34}
➲ has_key(chave) : pergunta se o dicionário possui a chave pas-
sada como parâmetro.
>>> ficha.has_key('idade')
True
>>> ficha.has_key('endereço')
False
➲ keys(): retorna as chaves do dicionário.
>>> ficha.keys()
['idade', 'salário', 'profissão', 'nome']
Alguns Métodos
➲ values() : retorna quais valores estão contidos no dicionário.
>>> ficha.values()
[34, 7200, 'engenheiro', 'Carlos']
➲ items() : retorna uma lista de tuplas contendo os pares 
(chave,valor).
>>> ficha.items()
[('idade', 34), ('salário', 7200), ('profissão', 'engenheiro'), 
('nome', 'Carlos')]
Iteração em Dicionários
➲ Ao aplicar a varredura de for sobre um dicionário, o nome 
dado aos elementos é interpretado como sendo a chave do 
dicionário.
ficha = {'idade': 34, 'salário': 7200, 'profissão': 'engenheiro', 
'nome': 'Carlos'}
>>> for elemento in ficha.keys():
 print elemento
 idade
 salário
 profissão
 nome
Iteração em Dicionários
➲ O nome elemento assume o valor das chaves do dicionário 
ficha, logo podemos fazer:
>>> for elemento in ficha.keys():
 print elemento, ':',ficha[elemento]
 idade : 34
 salário : 7200
 profissão : engenheiro
 nome : Carlos
Iteração em Dicionários
➲ E se eu quisesse reproduzir o resultado anterior só que 
usando o método items() ?
● Lembrem-se que items() retorna uma lista de tuplas con-
tendo o par (chave,valor)
● Lembrem-se que o for pode vasculhar qualquer sequência, 
inclusive uma lista de tuplas.
Iteração em Dicionários
➲ Resposta:
>>> for tupla in ficha.items():
 print tupla[0], ':', tupla[1]
idade : 34
salário : 7200
profissão : engenheiro
nome : Carlos
Exemplo
➲ Vamos voltar ao exemplo dado no início da aula e vamos 
montar um dicionário que guarda a data de aniversário de um 
conjunto de pessoas.
➲ 1º Passo:
● Nome do dicionário: aniversario
● Crie um dicionário com os seguintes pares:
('Ana', '10/03')
('Pedro', '20/08')
('Luis','05/02')
● Mostre o dicionário
Exemplo
➲ Resposta:
>>> aniversario = {'Ana':'10/03', 'Pedro':'20/08', 'Luis':'05/02'}
>>> aniversario
{'Luis': '05/02', 'Pedro': '20/08', 'Ana': '10/03'}
Exemplo
➲ 2º Passo:
● Acrescente o par ('Juca','24/01') ao dicionário
● Atualize o aniversário da 'Ana' para '10/04'
● Mostre o novo dia do aniversário de 'Ana'
● Delete o par ('Pedro', '20/08')
● Mostre o dicionário atualizado
Exemplo
➲ Resposta:
>>> aniversario['Juca'] = '24/01'
>>> aniversario['Ana'] = '10/04'
>>> aniversario['Ana']
'10/04'
>>> del aniversario['Pedro'] # ou aniversario.pop('Pedro')
>>> aniversario
{'Luis': '05/02', 'Juca': '24/01', 'Ana': '10/04'}
Exemplo
➲ Como alterar o exemplo dado se quisermos que o nome e o 
aniversário sejam passados pelo usuário?
➲ Para simplificar, assuma que iremos ler 3 pares e que todas as 
chaves são diferentes entre si.
➲ Faça um programa a parte e execute no Shell
Exemplo
➲ Resposta:
aniversario = {}
for i in range(3):
 nome = raw_input("Digite o nome:")
 niver = raw_input("Digite a data do aniversário:")
 aniversario[nome] = niver
print aniversario
Exemplo
➲ Executando:
Digite o nome:Ana
Digite a data do aniversário:10/03
Digite o nome:Pedro
Digite a data do aniversário:20/08
Digite o nome:Luis
Digite a data do aniversário:05/02
{'Luis': '05/02', 'Pedro': '20/08', 'Ana': '10/03'}
Exemplo
➲ Considerando o programa anterior, como alterá-lo para agora 
validar se o nome inserido já existe?
Exemplo
➲ Resposta: 
aniversario = {}
for i in range(3):
 nome = raw_input("Digite o nome:")
 while aniversario.has_key(nome):
 print "nome já cadastrado, digite outro nome"
 nome = raw_input("Digite o nome:")
 niver = raw_input("Digite a data do aniversário:")
 aniversario[nome] = niver
print aniversario
Exemplo
➲ Executando:
Digite o nome:Ana
Digite a data do aniversário:10/03
Digite o nome:Ana
Nome já existe
Digite o nome:Pedro
Digite a data do aniversário:20/08
Digite o nome:Luis
Digite a data do aniversário:05/02
{'Luis': '05/02', 'Pedro': '20/08', 'Ana': '10/03'}
Exemplo
➲ Complete o programa anterior para imprimir todos os nomes 
e aniversários no formato:
Nome faz aniversário no dia Dia
Exemplo
➲ Resposta:
for nome in aniversario.keys():
 print nome, 'faz aniversário no dia',aniversario[nome]
➲ Executando:
Digite o nome:Ana
Digite a data do aniversário:10/03
Digite o nome:Pedro
Digite a data do aniversário:20/08
Digite o nome:Luis
Digite a data do aniversário:05/02
Luis faz aniversário no dia 05/02
Pedro faz aniversário no dia 20/08
Ana faz aniversário no dia 10/03Exemplo
➲ Altere o programa anterior para imprimir todos os dias de 
aniversários do mês de março. 
➲ Faça usando o método values()
Exemplo
➲ Resposta:
for data in aniversario.values():
 data = data.split('/')
 if data[1] == '03':
 print data[0],
➲ Executando:
Digite o nome:Ana
Digite a data do aniversário:10/03
Digite o nome:Luis
Digite a data do aniversário:15/03
Digite o nome:Juca
Digite a data do aniversário:20/08
15 10
Exercício
➲ Monte um dicionário contendo o nome de todos os 
aniversariantes de cada mês do ano.
● Chame o dicionário de aniversariantes
● Considere a chave como sendo o mês e o valor como sendo 
uma lista de nomes.
● Para simplificar, crie o dicionário com valores fixos e apen-
as para os meses de Janeiro, Fevereiro e Março.
Exercício
➲ Resposta:
 aniversariantes = {'janeiro':['joao','carlos','pedro'],
 'fevereiro':['ana','pedro','maria'],
 'março':['vitor','silvia']}
 print aniversariantes
Exercício
➲ Complete o programa para que o usuário digite um mês e seja 
impresso os aniversariantes daquele mês no formato:
Aniversariantes do mês de Janeiro
---------------------------------------------
João 
Carlos
Pedro
➲ Assuma que o mês digitado existe no dicionário
Exercício
➲ Resposta:
mes = raw_input("Digite o mes desejado:")
print "Aniversariantes do mês de %s" % mes
print "-------------------------------------"
for pessoa in aniversariantes[mes]:
 print pessoa
Exercício
➲ Altere o programa para imprimir todos os aniversariantes de 
todos os meses no formato:
março => ['vitor', 'silvia']
fevereiro => ['ana', 'pedro', 'maria']
janeiro => ['joao', 'carlos', 'pedro']
Exercício
➲ Resposta:
for mes, pessoas in aniversariantes.items():
 print mes, '=>', pessoas
Exercício
➲ Desafio: Considere agora que além de guardar os aniversari-
antes por mês, o dicionário também guarda o dia do aniver-
sário de cada um.
➲ Como fazer isso?? 
➲ Podemos usar dicionários como valores de dicionários? SIM!!
➲ TENTE!!
Exercício
aniversariantes = {'janeiro':{'joao':10,'carlos':5,'pedro':2},
 'fevereiro':{'ana':10,'pedro':23,'maria':12},
 'março':{'vitor':4,'silvia':17}}
mes = raw_input("Digite o mes desejado:")
print "Aniversariantes do mês de %s" % mes
print "-------------------------------------"
for pessoa in aniversariantes[mes].keys():
 print pessoa,
 print aniversariantes[mes][pessoa]
for mes in aniversariantes.keys():
 print mes, '=>'
 for pessoa in aniversariantes[mes]:
 print pessoa,
 print aniversariantes[mes][pessoa]
Exercícios para Casa
➲ 1) Altere os programas de aniversariante para considerar os 
dados digitados pelo usuário.
➲ 2) Faça um programa para criar uma Agenda contendo nome, 
referência e telefones de cada pessoa. 
● Exemplo: Ana Faculdade [22863756, 97865487]
● Teste se os valores inseridos já existem
● Seja criativo e complete o programa de forma a usar os 
métodos items(), values(), keys(), del e pop()
	Título
	Visão Geral
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38

Continue navegando