– Dicionários em Python
Já vimos até agora 2 formas de estruturar dados:
1) Listas – Usam [], são mutáveis;
2) Tuplas = Usam (), não são mutáveis;
Agora vamos conhecer uma das estruturas mais potentes. Os dicionários.
A estrutura desses dicionários são baseados em chaves (key) e valores (value).
Aqui, ao invés de usarmos a posição para acessar uma informação, vamos usar a CHAVE.
Outra característica que os dicionários não possuem é uma ordem padrão (nas versões mais antigas do Python)! Por isso não é recomendado pensarmos em posição ao usarmos dicionários.
Listas são assim: lista = [item1,item2,item3]
Tuplas são assim: tupla = (item1,item2,item3)
Estrutura:
dicionario = {chave: valor, chave: valor, chave: valor, chave: valor ...}
Vantagens e Desvantagens
• Não devem ser usados para pegar itens em uma determinada ordem.
• Podem ter valores heterogêneos (vários tipos de valores dentro de um mesmo dicionário: inteiros, strings, listas, etc)
• Chaves são únicas obrigatoriamente.
• Mais intuitivos de trabalhar.
Vamos entender melhor a estrutura e o que são as chaves e valores que falamos anteriormente. A estrutura sempre será chave : valor
No exemplo ao lado temos uma lista de produtos
mais vendidos por categoria.
• Todas as categorias (sublinhadas de amarelo) são Chaves (Keys);
• Todos os produtos são (sublinhados de verde) são Valores (values);
O Python sempre buscará um valor dado uma chave. Ex:
Dicionário produtos mais vendidos, chave livros? Resposta: o alquimista
tecnologia:iphone
refrigeracao:ar consul 12000 btu
livros:o alquimista
eletrodomesticos:geladeira
lazer:prancha surf
Vamos ver o mesmo exemplo, mas agora no Python! Usamos a mesma estrutura do slide anterior para descrever nos itens do dicionário. Atenção, que como se tratam de strings precisamos usar as aspas!
Criamos uma variável livro para receber o VALOR do dicionário mais_vendidos. Como a CHAVE fornecida foi ‘livros’, o valor atribuído é ’o alquimista’.
mais_vendidos = {'tecnologia': 'iphone', 'refrigeracao': 'ar consul 12000 btu', 'livros': 'o alquimista', 'eletrodoméstico': 'geladeira', 'lazer': 'prancha surf'}
livro = mais_vendidos['livros']
print(livro)
_________________
o alquimista
– Pegar item Dicionário e Verificar Item Dicionário
Como vimos no exemplo anterior podemos buscar um VALOR usando NOMEDICIONARIO[‘CHAVE’]. Além dessa forma também temos um método chamado .GET(). Aqui vamos usar a mesma premissa anterior, só mudando o formato do código.
mais_vendidos = {'tecnologia': 'iphone', 'refrigeracao': 'ar consul 12000 btu', 'livros': 'o alquimista', 'eletrodoméstico': 'geladeira', 'lazer': 'prancha surf'}
vendas_tecnologia = {'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000, 'tv philco': 2500, 'notebook hp': 1000, 'notebook dell': 17000, 'notebook asus': 2450}
print(mais_vendidos['livros'])
print(mais_vendidos.get('livros'))
__________________
o alquimista
o alquimista
O que aconteceria se procurássemos por uma chave que não existe?. Usando apenas chave ao procurar uma chave inexistente, o Python retorna um erro.
Já o método .GET retornará NONE como resultado. Ou seja, não existe nenhuma CHAVE ‘geladeiras’ no dicionário.
print(mais_vendidos['livros'])
__________________
KeyError: 'geladeiras'
print(mais_vendidos.get('livros'))
__________________
None
A T E N Ç Ã O !
O fato do método GET não retornar erro não significa que seja melhor para todas as situações!
– Adicionar, Modificar e Remover Itens do Dicionário
Assim como as listas, também podemos atualizar dicionários, adicionando, modificando ou removendo itens. No exemplo ao lado, temos um dicionário vazio que vamos inserir dados de duas formas distintas.
vendas_vendedores = {}
vendas_vendedores['João'] = 100
print(vendas_vendedores)
vendas_vendedores.update({'Lira': 50, 'Alon': 80})
print(vendas_vendedores)
___________________________
{'João': 100}
{'João': 100, 'Lira': 50, 'Alon': 80}
E quando inserimos uma CHAVE que já
existe?
Perceba que ao usarmos as mesma estrutura anterior e atualizamos os
valores das CHAVES anteriores.
Quando adicionamos novos valores em
CHAVES EXISTENTES, SUBSTITUÍMOS
os valores anteriores. Não há duplicidade
nas chaves.
vendas_vendedores = {}
vendas_vendedores['João'] = 70
print(vendas_vendedores)
vendas_vendedores.update({'Lira': 67, 'Alon': 12})
print(vendas_vendedores)
___________________________
{'João': 70, 'Lira': 50, 'Alon': 80}
{'João': 70, 'Lira': 67, 'Alon': 12}
Para remover um conjunto chave/valor de um dicionário, nós temos 3 formas distintas.
• DEL() – Exclui um conjunto chave/valor de um dicionário;
• .POP() – Apaga um conjunto chave/valor de um dicionário, mas armazena essa informação em outra variável;
• .CLEAR() – Apaga todos os dados de um dicionário.
lucro_1tri = {'janeiro': 100000, 'fevereiro': 120000, 'março': 90000}
lucro_2tri = {'abril': 88000, 'maio': 89000, 'junho': 120000}
#Removendo o mês de junho do dicionário e armazenando em uma variável Lucro_jun:
del lucro_2tri['junho']
print(lucro_2tri)
_______________________________
{'abril': 88000, 'maio': 89000}
#Removendo o conjunto chave valor de junho e atribuindo a variável Lucro_jun:
lucro_jun = lucro_2tri.pop('junho')
print(lucro_2tri)
print(lucro_jun)
_____________________
{'abril': 88000, 'maio': 89000}
120000
#Removendo todos os dados de um dicionário:
lucro_2tri.clear()
print(lucro_2tri)
___________________
{}
– For em Dicionários
Vamos entender como associar o FOR para fazer um unpacking dos conjuntos chave/valor. Usando o mesmo princípio que vimos anteriormente vamos criar uma variável chave que irá percorrer todo o dicionário vendas_tecnologia. Perceba que ao fazermos print(chave) não temos o conjunto chave/valor, apenas a chave.
vendas_tecnologia = {'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000, 'tv philco': 2500, 'notebook hp': 1000, 'notebook dell': 17000, 'notebook asus': 2450}
#demonstrando o for
for chave in vendas_tecnologia:
print(chave)
________________________
iphone
samsung galaxy
tv samsung
ps5
tablet
ipad
tv philco
notebook hp
notebook dell
notebook asus
Sabendo que conseguimos acessar o valor com uma chave específica, podemos usar a estrutura vendas_tecnologia[chave] a fim de termos o resultado esperado.
– Métodos Úteis Dicionários – items
Assim como as listas e tuplas os dicionários possuem alguns métodos que nos ajudam a tratar os dados de forma simples: Neste primeiro exemplo iremos usar o método .items().
Aqui ao invés de usarmos no for chave, vamos usar item. Perceba que o que temos de retornos não são apenas as chaves, mas todas as tuplas do dicionário com seus resultados chave/valor
vendas_tecnologia = {'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000, 'tv philco': 2500, 'notebook hp': 1000, 'notebook dell': 17000, 'notebook asus': 2450}
for item in vendas_tecnologia.item():
print(item)
________________________
('iphone', 15000)
('samsung galaxy', 12000)
('tv samsung', 10000)
('ps5', 14300)
('tablet', 1720)
('ipad', 1000)
('tv philco', 2500)
('notebook hp', 1000)
('notebook dell', 17000)
('notebook asus', 2450)
Podemos aproveitar as tuplas para fazermos o unpacking como já vimos no módulo 11.
A diferença aqui é que não usamos item no for e sim 2 variáveis que descrevem melhor o que representam o conjunto chave/valor.
vendas_tecnologia = {'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000, 'tv philco': 2500, 'notebook hp': 1000, 'notebook dell': 17000, 'notebook asus': 2450}
for produto,vendas in vendas_tecnologia.item():
print('{}: {} de unidades.'.format(produto,vendas))
________________________
iphone: 15000 de unidades.
samsung galaxy: 12000 de unidades.
tv samsung: 10000 de unidades.
ps5: 14300 de unidades.
tablet: 1720 de unidades.
ipad: 1000 de unidades.
tv philco: 2500 de unidades.
notebook hp: 1000 de unidades.
notebook dell: 17000 de unidades.
notebook asus: 2450 de unidades.
– Métodos Úteis Dicionários – Keys and values
Mais 2 métodos de dicionários usualmente utilizados são:
• keys()
• values()
vendas_tecnologia = {'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000, 'tv philco': 2500, 'notebook hp': 1000, 'notebook dell': 17000, 'notebook asus': 2450}
print(vendas_tecnologia.keys())
print(vendas_tecnologia.values())
________________________
dict_keys(['iphone', 'samsung galaxy', 'tv samsung', 'ps5', 'tablet', 'ipad', 'tv philco', 'notebook hp', 'notebook dell', 'notebook asus'])
dict_values([15000, 12000, 10000, 14300, 1720, 1000, 2500, 1000, 17000, 2450)]
A T E N Ç Ã O !
O dict_keys ou o dict_values são listas um pouco das que vimos até agora. Elas são listas associadas diretamente ao
dicionário. Portanto, qualquer modificação no conjunto CHAVE/VALOR irá alterar a lista dict_keys ou dict_values.
– Zip e Transformando Listas em Dicionários
Até agora sempre trabalhamos com 2 listas que eram complementares entre sim porém não possuíam vínculo de estrutura. O que vamos ver agora é como transformar listas em dicionários. Isso é bastante útil, pois como sabemos o dicionário faz um link entre informações de chave e valor.
Nesse caso, as chaves são os itens da lista produtos e os valores, os itens da lista vendas. No entanto, para fazermos essa conversão precisamos transformar essas duas listas em uma lista de tuplas usando a função ZIP() conforme apresentado no print ao lado.
produtos = ['iphone', 'samsung galaxy', 'tv samsung', 'ps5', 'tablet', 'ipad']
vendas = [15000, 12000, 10000, 14300, 1720, 1000]
lista_tuplas = zip(produtos, vendas)
print(lista_tuplas)
______________________
<zip object at 0x00000203DBF30E00>
Função ZIP criará um objeto por isso ao “printarmos” lista_tuplas não temos a lista e sim o código desse objeto
Como vimos, printar a lista_tuplas não nos trouxe o resultado esperado. Para podermos acessar os itens dessa lista vamos usar um conhecimento que já vimos: o unpacking. Usando o for vamos printar todos os itens da lista_tuplas. Perceba que o resultado são tuplas!
produtos = ['iphone', 'samsung galaxy', 'tv samsung', 'ps5', 'tablet', 'ipad']
vendas = [15000, 12000, 10000, 14300, 1720, 1000]
lista_tuplas = zip(produtos, vendas)
print(lista_tuplas)
for item in lista_tuplas:
print(item)
______________________
<zip object at 0x00000203DBF30E00>
('iphone', 15000)
('samsung galaxy', 12000)
('tv samsung', 10000)
('ps5', 14300)
('tablet', 1720)
('ipad', 1000)
Agora, nos falta criarmos o dicionário a partir da nossa lista de tuplas. Para isso, vamos usar a função dict(). Veja que agora a lista e produtos e vendas foram agora agrupadas em dicionário_vendas.
produtos = ['iphone', 'samsung galaxy', 'tv samsung', 'ps5', 'tablet', 'ipad']
vendas = [15000, 12000, 10000, 14300, 1720, 1000]
lista_tuplas = zip(produtos, vendas)
dicionario_vendas = dict(lista_tuplas)
print(dicionario_vendas)
______________________
{'iphone': 15000, 'samsung galaxy': 12000, 'tv samsung': 10000, 'ps5': 14300, 'tablet': 1720, 'ipad': 1000}
A T E N Ç Ã O !
As listas, produtos e vendas não deixaram de existir!! Apenas foi criado um dicionário ‘dicionário_vendas’ a partir dessas listas
Nenhum comentário:
Postar um comentário