Baixe o app para aproveitar ainda mais
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
Compartilhar