Python #4: estrutura de dados - dicionários
Tags: beginners, python, codenewbie, datascience
Published: 2022-01-24 16:57:08

_Esse post faz parte dos meus cadernos **pessoais** de estudos. Todas as anotações são baseadas nas aulas da Mentorama - Cientista de Dados do zero e organizadas sob o meu ponto de vista. M2A1A5._

 ---

### Estrutura de Dados em Python

Definição: Coleções de dados com características específicas


#### Dicionários

Mutáveis, conceito chave-valor. 

O dicionário coleciona **pares** de elementos. Sempre haverá uma chave e seu valor correspondente. 

---


##### Criando um dicionário 

`dicionario = {}
dicionario
{}
type(dicionario)
dict`

Também dá pra criar usando a função `dict` igual fizemos com a função `tuple`

A inspiração é a mesma de um dicionário comum:

`dict_en_pt = {"data science" : "ciência de dados", 
"machine learning" : "aprendizado de máquina", 
"deep learning" : "aprendizado profundo"} `

##### Pareando chave-valor 

O dicionário é apresentado entre colchetes `{ }`
Primeiro se insere a chave, dois pontos, e o valor. 

Ex.: `notas_prova1 = {"Joao":10,"Maria":7.5, "Pedro":6}`

**As chaves sempre são únicas.** Imagine que ao abrir um dicionário, você não encontra a mesma palavra duas vezes. 

Sendo assim, quando você atribui um novo valor à uma variável, o Python vai **sobrescrever ** a chave já existente. 

`notas_prova1["Joao"] = 9
notas_prova1
{'Joao': 9, 'Maria': 7.5, 'Pedro': 6}`


Você não adicionou outro "João" e sim mudou a nota de 10 pra 9.

##### Criando uma nova chave 

`notas_prova1["Mariana"] = 8.7`

não tem nenhuma chave Mariana, então ela será criada automaticamente 

##### Funções do dicionário 

Função: `update`

`notas_prova1.update({"Joaquin":7.7})`

como não tinha nenhum Joaquin, a chave foi criada e não sobrescrita. 

Para contar os elementos, usamos `len` igual nas outras estruturas, porém um elemento no dicionário é um par chave-valor, então ele retornará o número de **pares**.

`len(notas_prova1)
5`


##### Acessar um valor 

- via chave
`notas_prova1{"Joao"} 
9 `

ou via função `get`

`notas_prova1.get("Joao")
9 `

- via indexação 
a indexação é pela chave e não pela posição como nas listas 

 `notas_prova1[0] 
KeyError: 0`


##### Alterar um valor 

Mudar o valor da chave. Ex:

`notas_prova1["Pedro] = 6.5`


O valor pode ser de vários tipos, por exemplo, uma lista de notas daquele aluno. Não somente uma nota, como anteriormente. 

`notas_provas={"Joao": [9, 9.5], "Maria": [7.5, 8], "Pedro": [6.5, 6], "Mariana": [8.7, 9] `

- valores com tipos diferentes 

`dic_formulario = {"nome": "Joao", "idade" : 18, "nota_1" :9} `

- chaves de tipos diferentes 
 
`dic_chavesvariostipos ={ "Nome":"Joao", 1: True, 2: 9.5}`

---


##### FUNÇÕES BÁSICAS PARA DICIONÁRIOS

`get`: acessar 
`keys`: mostra todas as chaves do dicionário 
`values`: mostra todas os valores 
`itens`: mostra todos os pares chave-valor 
`pop`: remove o par de acordo com a chave 
`update`: cria ou altera uma chave 
`clear`: apaga valores de um dicionário 

##### Função ZIP

Essa função pega o primeiro elemento da lista A e pareia com o primeiro da lista B. 

`lista_nomes = ["Maria", "Joao", "Pedro", "Mariana"]
lista_notas = [ 7.5,9,6.5,8.7]
print(lista_nomes)
['Maria', 'Joao', 'Pedro', 'Mariana']
print(lista_notas)
[7.5, 9, 6.5, 8.7]`

cria-se uma lista com tuplas: 

`lista_pares = list(zip(lista_nomes, lista_notas)) ; lista_pares
[('Maria', 7.5), ('Joao', 9), ('Pedro', 6.5), ('Mariana', 8.7)]`

e agora transforma essa lista em dicionário: 

`dict(lista_pares)
{'Maria': 7.5, 'Joao': 9, 'Pedro': 6.5, 'Mariana': 8.7}`