Baixe o app para aproveitar ainda mais
Prévia do material em texto
INF1025: Introdução à Programação Monitor: André Vicente Pessanha Resumo Dicionário: *************************************************************************************************** OBS: Essa matéria cai somente na P3! *************************************************************************************************** Definição: Dicionários são bem parecido com listas. A principal vantagem é a possibilidade de escolher o tipo (Número ou String) e quais são os valores dos índices! E a principal desvantagem é não existir ordenação! (O método sort só funciona em listas!) Lembrando que em listas, a indexação é feita obrigatoriamente com números em >> Sequência << e não podemos escolher, os índices são sempre fixos. Em dicionários, o índice é representado por uma chave que identifica de forma >> única << cada elemento (Um código, nome, cpf, etc) algo que não se repita! Não podemos ter chaves repetidas! Pois são os identificadores de cada elemento do dicionário. OBS: Em Banco de dados será dado bastante ênfase nesse conceito que é chamado de chave primária. (Primary Key) Então em dicionário precisamos especificar dois campos: Chave e valor (De cada elemento) OBS: Lembrando que os elementos em lista são indexados por números inteiros! (Começando em zero) Enquanto em dicionários, os elementos são indexados por uma chave de qualquer tipo! (Número ou string) ------------------------------------------------------- // ------------------------------------------------------------ - Como criar uma Dicionário? EX: Crie um dicionário que represente os dados de um zoológico onde cada animal possui um código e um nome. O primeiro passo é analisar, qual dessas informações é algo >> Único << ? O código ou o nome? Como pode ter nomes repetidos e o código identifica cada animal de forma única (Assim como um CPF) então vamos usar o código como chave do dicionário! dados = { 100: "Coelho", 255: "Pombo", 353: "Esquilo" } print(dados) # Exibe o dicionário todo EX2: Crie um dicionário que represente os dados de um zoológico onde cada animal possui um nome, um peso e uma altura. Wait! Agora não temos mais o código, somente nome, peso e altura. Qual deles será o identificador de cada elemento agora? :O Como sabemos que é possível ter repetição tanto no peso quanto na altura de um animal. Então vamos usar o nome como chave do dicionário! dados = { "Coelho": [18.5 , 4], "Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] } OBS: Notou que dessa vez os índices (Chaves) são strings? :O OBS: O enunciado das questões sempre envolvem tabelas com as informações. Nunca vamos precisar inventar do além todos esses dados. E na dúvida do identificador, é só observar na tabela qual das informações nunca se repete. :) ------------------------------------------------------- // ------------------------------------------------------------ - Como acessar o conteúdo de um elemento: dados = { "Coelho": [18.5 , 4], "Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] } print( dados[“Coelho”] ) # Exibe o altura e peso [18.5, 4] OBS: Lembrando que em Lista pra acessar o primeiro elemento iríamos usar dados[ 0 ] pois a contagem dos índices começa em >> Zero << Mas em dicionários >> Não << existe sequência numérica, podemos usar qualquer valor como índice do elemento! ------------------------------------------------------- // ------------------------------------------------------------ - Como alterar um elemento do dicionário? dados = { "Coelho": [18.5 , 4], "Cat":[22.7 , 4.5] } dados[“Cat”] = [23.5, 4.2] OBS: Lembrando que se colocar um nome de chave que >> Não << existe no dicionário, como por exemplo “cat” (Sem querer com letra minúscula) será inserido como um novo elemento no dicionário!!! :( ------------------------------------------------------- // ------------------------------------------------------------ - Verificar se uma chave pertence ao dicionário: dados = { "Coelho": [18.5 , 4], "Cat":[22.7 , 4.5] } pet = “Cat” if( pet in dados): print(“Esse animal existe no dicionário!”) else: print(“Esse animal Não existe no dicionário!”) OBS: Se a chave pertence ao dicionário, a condição if é True, senão False. ------------------------------------------------------- // ------------------------------------------------------------ - Como adicionar um novo elemento no Dicionário? Temos o seguinte dicionário do Zoológico e queremos adicionar um Pombo com 10cm de altura e 5kg de peso (Sim, é um Pombo muito pesado! :O ) dados = { "Coelho": [18.5 , 4], "Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] } dados[“Pombo”] = [10, 5] OBS: É só colocar qualquer nome ou número (Dependendo do tipo da chave) seguido de uma atribuição com o valor(es) ------------------------------------------------------- // ------------------------------------------------------------ - Como percorrer um dicionário? dados = { "Coelho": [18.5,4],"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } for k in dados: print(k) OBS: A variável >> k << sempre armazena as chaves (índices) do dicionário! Da mesma forma como a variável >> i << em lista! Pra não confundir, recomendo usar >> key << ou >> k << como nome de variável! Justamente pra lembrar que se trata das chaves do dicionário! :) ------------------------------------------------------- // ------------------------------------------------------------ - Como remover elementos do dicionário? EX: Remova o elemento “Coelho” do dicionário. (Pombos não gostam de coelhos e estão criando confusão no Zoológico! :O ) dados = { "Coelho": [18.5,4],"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } del dados[“Coelho”] Mas e se queremos remover do dicionário e retornar os dados do elementos removido? info = dados.pop("Coelho") print("Informação do Coelho:", info) print(dados) OBS: O método pop remove e >> Retorna << o valor do elemento removido! ------------------------------------------------------- // ------------------------------------------------------------ Principais Métodos de Dicionário: 1) O Método get recebe uma chave como parâmetro e retorna seu valor ou a string “None” se a chave não existe. dados = {"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } info = dados.get("Pombo") print(info) Podemos especificar no segundo parâmetro a mensagem que será exibida caso a chave não exista no dicionário: info = dados.get("Dog", "Não achou! :(") print(info) 2) O método keys retorna todas as chaves do dicionário. dados = {"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } nomes = list(dados.keys()) print(nomes) OBS: Esse método retorna uma sequência de valores do tipo >> Tupla << (Não é do tipo list!) Então se queremos criar uma lista a partir das chaves do dicionário (Nome dos animais) precisamos converter para o tipo >> list <<! 3) O método values retorna os valores de todos os elementos do Dicionário. dados = {"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } info = list(dados.values()) print(info) OBS: Exatamente o mesmo esquema do método keys, precisamos converter o tipo para list! 4) O método update insere todas as chaves que >> Não << estão no dicionário e as que estão atualiza seu valor. EX: Queremos atualizar o dicionário dados com as informações do dicionários info. dados = {"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } info = {"Dog":[21.5, 5], "Cat":[23, 4]} dados.update(info) print(dados) OBS: Como a chave “Dog” não existe no dicionário dados, então ele é adicionado! E comoa chave “Cat” já existe, então ela é atualizada com os novos valores! 5) O método copy gera uma cópia de um dicionário. dados = {"Cat":[22.7 , 4.5], "Esquilo":[12.5 , 2.5] , "Pombo":[10,5] } info = dados.copy() print(info) OBS: Lembrando que é uma cópia do conteúdo (Chave e valores) do dicionário e da referência dos elementos! E >> Não << da referência do dicionário! Wait! Que negócio é esse de cópia da referência dos elementos!? O_O Quer dizer que se alterarmos um valor a partir de uma chave, essa alteração >> não << afeta o dicionário original. info = dados.copy() info["Cat"] = [23, 4] print(dados) print(info) Mas se alterarmos um elemento específico da lista que está dentro do dicionário, essa alteração tb será feita no dicionário original! info = dados.copy() info["Cat"][0] = 23 print(dados) print(info) E como faz pra clonar um dicionário? (Cópia da referência do dicionário) info = dados info["Cat"] = [23,4] print(dados) print(info) OBS: Como é feito uma cópia de ambas referências (Dicionário e dos elementos) agora qualquer alteração (Inclusive as dos exemplos acima) vai alterar o dicionário original! ------------------------------------------------------- // ------------------------------------------------------------ EX: Crie um dicionário com as informações da tabela abaixo e exiba o nome e o IMC (Peso / Altura ** 2) de cada um. Nome Altura Peso Huguinho 1.20 45 Luisinho 1.10 60 Zezinho 1.00 100 Patinhas 1.10 40 Donald 1.20 50 dados = {"Huguinho": [1.20,45], "Luisinho": [1.10,60], "Zezinho":[1.00,100], "Patinhas": [1.10, 40], "Donald": [1.20, 50] } for k in dados: print( k + " IMC: %.2f\n" % (dados[k][1] / dados[k][0]**2)) EX: A partir do dicionário do item anterior crie uma lista somente com os nomes e outra só com os valores (Use os métodos de Dicionário) Calcule o peso médio e atualize o dicionário somando 10% do peso médio se o nome contém a letra u. dados = {"Huguinho": [1.20,45], "Luisinho": [1.10,60], "Zezinho":[1.00,100], "Patinhas": [1.10, 40], "Donald": [1.20, 50] } nomes = list(dados.keys()) # Lembrar de converter! vals = list(dados.values()) pmed = 0 # Inicializar com zero (Somatório!) for x in vals: pmed += x[0] pmed /= len(nomes) # Calculando a média pmed *= 0.1 # 10% da média for x in nomes: if('u' in x): dados[x][0] += pmed for k in dados: print( k + " Peso: %.2f\n" % (dados[k][0])) EX: Adicione no dicionário a “Clarabela” com altura 2.30 e peso 80Kg e a Peninha com altura 1.20 e Peso 60Kg. dados["Clarabela"] = [2.30, 80] dados["Peninha"] = [1.20, 60] print(dados) EX: Remova do dicionário a “Peninha” e exiba na tela suas informações. info = dados.pop("Peninha") print(info) EX: Crie uma cópia do dicionário e altere as informações de Donald e exibe na tela ambos dicionários. info = dados.copy() info["Donald"] = [2.0, 100] print(dados) print(info) ------------------------------------------------------- // ------------------------------------------------------------
Compartilhar