Baixe o app para aproveitar ainda mais
Prévia do material em texto
Computação I - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário João C. P. da Silva Carla A. D. M. Delgado Ana Luisa Duboc Dept. Ciência da Computação - UFRJ http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 1 / 16 http://lattes.cnpq.br/9413102524215939 http://lattes.cnpq.br/3831909651244142 http://lattes.cnpq.br/3831909651244142 Dicionário Considere que você precisa fazer uma função que guarde o nome e o telefone de seus amigos. Sua função também deve permitir a consulta aos telefones das pessoas. Como guardar estas informações (nome e telefone)? Como recuperar o telefone de uma dada pessoa? http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 2 / 16 Dicionário Dicionários são estruturas para armazenar dados. Não são sequências como strings, listas e tuplas. São mapeamentos formados por pares de chave − valor . Chave1 → Conteúdo1 Chave2 → Conteúdo2 Chave3 → Conteúdo3 · · · Representam uma coleção não ordenada de valores onde cada valor é referenciado através de sua chave. Notação: { chave1: conteúdo1, chave2: conteúdo2, ..., chaveN: conteúdoN } http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 3 / 16 Dicionário Dicionários são mapeamentos formados por pares de chave − valor . As chaves funcionam como os ı́ndices de uma lista Chave1 → Conteúdo1 Chave2 → Conteúdo2 Chave3 → Conteúdo3 · · · As chaves de dicionários são dados de tipo imutável, geralmente strings (podem ser tuplas ou tipos numéricos). Os valores em um dicionário são dados quaisquer. http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 4 / 16 Dicionário 1 >>> Caderno = {” Ca r l o s ” : ”2222−2223 ” , ”Andre” : ”2121−9092 ” , ” Jose ” : ”9999−9291 ”} 2 3 >>> Caderno [ ”Andre” ] 4 ’ 2121−9092 ’ 5 6 >>>Caderno [ ” Jo rge ” ] 7 Traceback (most r e c e n t c a l l l a s t ) : 8 F i l e ”<p y s h e l l#8>” , l i n e 1 , i n <module> 9 Caderno [ ” Jo rge ” ] 10 KeyError : ’ Jo rge ’ 11 12 >>> ” Jorge” i n Caderno 13 Fa l s e 14 15 >>> l e n ( Caderno ) 16 3 http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 5 / 16 Dicionário Podemos usar a função dict para definir dicionários: Lista de pares (chave,valor): Caderno = dict([(”Carlos”,”2222-2223”),(”André”,”2121-9992”), (”José”,”9999-9291”)]) Sequência de itens no formato chave=valor: Caderno = dict(Andre=”2121-9992”, Jose=”9999-9291”, Carlos=”2222-2223”) http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 6 / 16 Dicionário 1 >>> Caderno = {” Ca r l o s ” : ”2222−2223 ” , ”Andre” : ”2121−9092 ” , ” Jose ” : ”9999−9291 ”} 2 3 >>> Caderno [ ” Jose ” ] 4 ’ 9999−9291 ’ 5 6 >>>Caderno [ ” Jose ” ] = ”8799−0405 ” 7 8 >>>Caderno [ ” Jose ” ] 9 ’ 8799−0405 ’ Dicionários são mutáveis. Mesma sintaxe da inserção! Não é inserida outra chave com o mesmo nome e valor diferente, pois chaves são únicas. http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 7 / 16 Dicionário 1 >>> Caderno = {” Ca r l o s ” : ”2222−2223 ” , ”Andre” : ”2121−9092 ” , ” Jose ” : ”9999−9291 ”} 2 3 >>> ” Jorge” i n Caderno 4 Fa l s e 5 6 >>>Caderno [ ” Jo rge ” ] = ”8586−9091 ” 7 8 >>>Caderno [ ” Jo rge ” ] 9 ’ 8586−9091 ’ 10 11 >>>Caderno 12 { ’ Andre ’ : ’ 2121−9092 ’ , ’ Jo rge ’ : ’ 8586−9091 ’ , ’ Jose ’ : ’ 8799−0405 ’ , 13 ’ C a r l o s ’ : ’ 2222−2223 ’} Para adicionar um novo par chave:valor Perceba que, diferentemente de listas, atribuir a um elemento de um dicionário não requer que uma posição exista previamente. 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. http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 8 / 16 Manipulação de Dicionário Como saber quais são as chaves e os valores de um dicionário? dict.keys(<dicionário>): retorna a lista com todas as chaves do dicionário passado como parâmetro. dict.values(<dicionário>): retorna a lista com todos os valores do dicionário passado como parâmetro. 1 >>> meses = {” j a n e i r o ” : 31 , ” f e v e r e i r o ” : 28 , ”marco” : 31 , ” a b r i l ” : 30 , ”maio ” : 31 , 2 ” junho ” : 30 , ” j u l h o ” : 31 , ” agos to ” : 31 , ” se tembro ” : 30 , ” outubro ” : 31 , ”novembro ” : 31 , 3 ”dezembro” :31} 4 5 >>> l i s t ( d i c t . k e y s ( meses ) ) 6 [ ’ novembro ’ , ’ marco ’ , ’ j u l h o ’ , ’ agos to ’ , ’ f e v e r e i r o ’ , ’ junho ’ , ’ dezembro ’ , ’ j a n e i r o ’ , 7 ’ a b r i l ’ , ’ maio ’ , ’ outubro ’ , ’ se tembro ’ ] 8 9 >>> l i s t ( d i c t . v a l u e s ( meses ) ) 10 [31 , 31 , 31 , 31 , 28 , 30 , 31 , 31 , 30 , 31 , 31 , 30 ] http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 9 / 16 Manipulação de Dicionário dict.items(<dicionário>): retorna uma lista com todos os pares (chave, conteúdo) do dicionário passado como parâmetro. 1 >>> meses = {” j a n e i r o ” : 31 , ” f e v e r e i r o ” : 28 , ”marco” : 31 , ” a b r i l ” : 30 , ”maio ” : 31 , 2 ” junho ” : 30 , ” j u l h o ” : 31 , ” agos to ” : 31 , ” se tembro ” : 30 , ” outubro ” : 31 , 3 ”novembro ” : 31 , ”dezembro” :31} 4 5 >>> l i s t ( d i c t . i t ems ( meses ) ) 6 [ ( ’ novembro ’ ,31) , ( ’ marco ’ ,31) , ( ’ j u l h o ’ ,31) , ( ’ agos to ’ ,31) , ( ’ f e v e r e i r o ’ ,28) , 7 ( ’ junho ’ ,30) , ( ’ dezembro ’ ,31) , ( ’ j a n e i r o ’ ,31) , ( ’ a b r i l ’ , 30) , ( ’ maio ’ ,31) , 8 ( ’ outubro ’ ,31) , ( ’ se tembro ’ ,30) ] http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 10 / 16 Manipulação de Dicionário dict.get(<dicionário>,chave,[valor de retorno]): Retorna o valor associado com a chave. Se chave não está no dicionário e se o valor de retorno é especificado, retorna o valor especificado. Se o valor de retorno não é especificado, retorna None. 1 >>> meses = {” j a n e i r o ” : 31 , ” f e v e r e i r o ” : 28 , ”marco” : 31 , ” a b r i l ” : 30 , ”maio ” : 31 , 2 ” junho ” : 30 , ” j u l h o ” : 31 , ” agos to ” : 31 , ” se tembro ” : 30 , ” outubro ” : 31 , ”novembro ” : 31 , 3 ”dezembro” :31} 4 5 >>> d i c t . ge t ( meses , ”marco” ) 6 31 7 8 >>> d i c t . ge t ( meses , ”marco” , ” Va l o r nao encont r ado” ) 9 31 10 11 >>> d i c t . ge t ( meses , ”Marco” ) 12 None 13 14 >>> d i c t . ge t ( meses , ”Marco” , ” Va l o r nao encont r ado” ) 15 ” Va l o r nao encont r ado” http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 11 / 16 Manipulação de Dicionário dict.clear(<dicionário>): apaga todos os itens do dicionário. dict.copy(<dicionário>): cria e retorna uma cópia do dicionário. 1 >>> meses = {” j a n e i r o ” : 31 , ” f e v e r e i r o ” :28} 2 3 >>> novo = d i c t . copy ( meses ) 4 5 >>> novo 6 { ’ f e v e r e i r o ’ : 28 , ’ j a n e i r o ’ : 31} 7 8 >>> novo [ ”maio ” ] = 31 9 10 >>> novo 11 { ’ maio ’ : 31 , ’ f e v e r e i r o ’ : 28 , ’ j a n e i r o ’ : 31} 12 13 >>> meses 14 { ’ f e v e r e i r o ’ : 28 , ’ j a n e i r o ’ : 31} 15 16 >>> d i c t . c l e a r ( meses ) 17 18 >>> meses 19 {} http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 12 / 16 Manipulação de Dicionário dict.copy(<dicionário>): cria e retorna uma cópia do dicionário. Os elementos mutáveis (listas ou dicionários) do novo dicionário são apenas referências aos elementos do dicionário original. 1 >>> meses = {” j a n e i r o ” : 30 , ” f e v e r e i r o ” : [ 2 8 , 2 9 ]} 2 >>> novo = d i c t . copy ( meses ) 3 >>> novo 4 { ’ f e v e r e i r o ’ : [ 2 8 , 2 9 ] , ’ j a n e i r o ’ : 30} 5 >>> novo [ ”maio ”]=31 6 >>> novo 7 { ’ maio ’ : 31 , ’ f e v e r e i r o ’ : [ 2 8 , 2 9 ] , ’ j a n e i r o ’ : 30} 8 >>> meses 9 { ’ f e v e r e i r o ’ : [ 2 8 , 2 9 ] , ’ j a n e i r o ’ : 30} 10 >>> novo [ ” j a n e i r o ” ]=31 11 >>> novo 12 { ’ maio ’ : 31 , ’ f e v e r e i r o ’ : [ 2 8, 2 9 ] , ’ j a n e i r o ’ : 31} 13 >>> meses 14 { ’ f e v e r e i r o ’ : [ 2 8 , 2 9 ] , ’ j a n e i r o ’ : 30} 15 >>> l i s t . pop ( novo [ ” f e v e r e i r o ” ] ) 16 29 17 >>> novo 18 { ’ maio ’ : 31 , ’ f e v e r e i r o ’ : [ 2 8 ] , ’ j a n e i r o ’ : 31} 19 >>> meses 20 { ’ f e v e r e i r o ’ : [ 2 8 ] , ’ j a n e i r o ’ : 30} http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 13 / 16 Manipulação de Dicionário Escreva uma função que receba uma frase como parâmetro e retorne um dicionário, onde cada chave seja um caracter e seu valor seja o número de vezes que o caracter aparece na frase lida. Exemplo: “Os ratos” → {“O”:1, “ “:1, “s”:2, “r”:1, “a”:1, “t”:1,”o”:1} Faça uma versão usando while e outra usando for. http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 14 / 16 Manipulação de Dicionário Escreva uma função que receba uma frase como parâmetro e retorne um dicionário, onde cada chave seja um caracter e seu valor seja o número de vezes que o caracter aparece na frase lida. Exemplo: “Os ratos” → {“O”:1, “ “:1, “s”:2, “r”:1, “a”:1, “t”:1,”o”:1} Faça uma versão usando while e outra usando for. 1 de f c r i a d i c i o n a r i o ( f r a s e ) : 2 3 ””” Solucao com wh i l e 4 Parametro de ent r ada : s t r 5 Va l o r de r e t o r n o : d i c ””” 6 7 d i c i o n a r i o = { } 8 i=0 9 wh i l e i < l e n ( f r a s e ) : 10 i f f r a s e [ i ] not i n d i c i o n a r i o : 11 d i c i o n a r i o [ f r a s e [ i ] ] = 1 12 e l s e : 13 d i c i o n a r i o [ f r a s e [ i ] ] += 1 14 i += 1 15 r e t u r n d i c i o n a r i o 1 de f c r i a d i c i o n a r i o ( f r a s e ) : 2 3 ””” Solucao com f o r 4 Parametro de ent r ada : s t r 5 Va l o r de r e t o r n o : d i c ””” 6 7 d i c i o n a r i o = { } 8 f o r c i n f r a s e : 9 i f c not i n d i c i o n a r i o : 10 d i c i o n a r i o [ c ] = 1 11 e l s e : 12 d i c i o n a r i o [ c ] += 1 13 r e t u r n d i c i o n a r i o http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 14 / 16 Manipulação de Dicionário 1. Escreva uma função que transforma uma lista de tuplas em um dicionário que associa o primeiro componente de cada tupla ao segundo. 2. Escreva uma função que transforma um dicionário em uma lista de tuplas, onde as tuplas estão ordenadas pelo primeiro componente. Lembre-se de list.sort. http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 15 / 16 Autores João C. P. da Silva Lattes Carla Delgado Lattes Ana Luisa Duboc Lattes Colaboradores Anamaria Martins Moreira Lattes Fabio Mascarenhas Lattes Leonardo de Oliveira Carvalho Lattes Charles Figueiredo de Barros Lattes Fabŕıcio Firmino de Faria Lattes http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 16 / 16 http://lattes.cnpq.br/9413102524215939 http://lattes.cnpq.br/3831909651244142 http://lattes.cnpq.br/8362978460368738 http://lattes.cnpq.br/2363575151206774 http://lattes.cnpq.br/2273723591083358 http://lattes.cnpq.br/3754078390316976 http://lattes.cnpq.br/1853606206364277 http://lattes.cnpq.br/9994062739448952 Computação I - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário João C. P. da Silva Carla A. D. M. Delgado Ana Luisa Duboc Dept. Ciência da Computação - UFRJ http://www.dcc.ufrj.br/˜pythonUFRJ/ Computação I - Python Aula 10 17 / 16 http://lattes.cnpq.br/9413102524215939 http://lattes.cnpq.br/3831909651244142 http://lattes.cnpq.br/3831909651244142
Compartilhar