Aula 5 - Dicionário de Dados
Conceito de Dicionários
Um dicionário é uma estrutura de dados que armazena pares de chave e valor. É muito útil quando você quer associar um valor a uma chave específica, como em um cadastro, configuração ou tabela. Para criar um dicionário, utilizamos chaves { }.
In [1]:
#No exemplo, criaremos um dicionário chamado pessoa
pessoa = {
'nome': 'Chuck',
'sobrenome': 'Nurris'
}
pessoa
Out[1]:
{'nome': 'Chuck', 'sobrenome': 'Nurris'}
In [2]:
#também é possível criar usando a classe dict
pessoa = dict(nome='Chuck', sobrenome='Nurris')
pessoa
Out[2]:
{'nome': 'Chuck', 'sobrenome': 'Nurris'}
In [34]:
#dicionários são estruturas bastante flexíveis. Podemos ter campos contendo listas ou até mesmo outros dicionários
#no exemplo, o campo endereco é formado por uma lista com dicionários para cada endereço
pessoa = {
'nome': 'Paulo',
'sobrenome': 'Soares',
'idade': 32,
'altura': 1.86,
'enderecos': [
{'rua': 'Rua Central', 'numero': 32},
{'rua': 'Rua Palmeiras', 'numero': 56},
]
}
pessoa
Out[34]:
{'nome': 'Paulo', 'sobrenome': 'Soares', 'idade': 32, 'altura': 1.86, 'enderecos': [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]}
In [2]:
print(pessoa['nome'])
print(pessoa['sobrenome'])
Paulo Soares
In [3]:
#para mostrar todo o dicionário
for chave in pessoa:
print(chave, pessoa[chave])
nome Paulo sobrenome Soares idade 32 altura 1.86 enderecos [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]
In [4]:
#para adicionar um campo, basta colocar a nova chave com o valor
#chaves não podem se repetir
pessoa['cpf']='05699886223'
pessoa
Out[4]:
{'nome': 'Paulo', 'sobrenome': 'Soares', 'idade': 32, 'altura': 1.86, 'enderecos': [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}], 'cpf': '05699886223'}
In [5]:
#para alterar a idade
pessoa['idade']=25
pessoa
Out[5]:
{'nome': 'Paulo', 'sobrenome': 'Soares', 'idade': 25, 'altura': 1.86, 'enderecos': [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}], 'cpf': '05699886223'}
In [6]:
#retorna todo o campo enderecos
pessoa['enderecos']
Out[6]:
[{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]
In [7]:
#retorna somente o segundo endereco da lista
pessoa['enderecos'][1]
Out[7]:
{'rua': 'Rua Palmeiras', 'numero': 56}
In [8]:
#pegamos apenas a rua do primeiro endereço do dicionário
pessoa['enderecos'][0]['rua']
Out[8]:
'Rua Central'
In [9]:
#apaga o campo cpf
del pessoa['cpf']
pessoa
Out[9]:
{'nome': 'Paulo', 'sobrenome': 'Soares', 'idade': 25, 'altura': 1.86, 'enderecos': [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]}
In [10]:
#se tentarmos acessar uma chave inexistente, gera exceções
#com 'get' conseguimos testar se a chave existe
if pessoa.get('cpf') is None:
print(' Não Existe')
else:
print('Existe')
Não Existe
In [21]:
#a função itens transforma um dacionário em um iterável
#entretando, não é possível navegar para imprimir os valores
dados=pessoa.items()
print(dados)
dict_items([('nome', 'Paulo'), ('sobrenome', 'Soares'), ('idade', 25), ('altura', 1.86), ('enderecos', [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}])])
In [22]:
#mas é possível converter em lista O resultado é uma lista de tuplas
dados=list(pessoa.items())
print(dados)
[('nome', 'Paulo'), ('sobrenome', 'Soares'), ('idade', 25), ('altura', 1.86), ('enderecos', [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}])]
In [23]:
#tranformando em lista é possível imprimir valores específicos
dados=list(pessoa.items())
print(dados[1][1])
Soares
In [24]:
#também é possível usar o for para imprimir todos os valores
for chave, valor in pessoa.items():
print(chave, valor)
nome Paulo sobrenome Soares idade 25 altura 1.86 enderecos [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]
In [30]:
#quando tentamos imprimir um valor com chave inexistente gera erro
#mas podemos definir um valor padrão para uma chave inexistente para não gerar erro
pessoa.setdefault('rg', 0)
print(pessoa['rg'])
0
In [35]:
#remove valores com base na sua chave
pessoa.pop('idade')
print(pessoa)
{'nome': 'Paulo', 'sobrenome': 'Soares', 'altura': 1.86, 'enderecos': [{'rua': 'Rua Central', 'numero': 32}, {'rua': 'Rua Palmeiras', 'numero': 56}]}
In [36]:
#copy - deve-se tomar cuidado com copia de valores
#no código abaixo os dois dicionarios estão apontado para o mesmo endereço de memória
#isso é uma shallow copy (cópia rasa)
dicionario1 = {
'x': 1,
'y': 2,
'z': 3
}
dicionario2 = dicionario1
print(dicionario2)
{'x': 1, 'y': 2, 'z': 3}
In [37]:
#qualquer alteração no dicionario1 altera também no dicionario2
dicionario1['x']=0
print(dicionario2['x'])
0
In [41]:
#para fazer a deep copy (copia profunda) é preciso usar uma biblioteca
#neste caso os dados são copiados para o outro dicionario de fato
#alterando um dicionario não afeta o outro
import copy
dicionario1 = {
'x': 1,
'y': 2,
'z': 3
}
dicionario2=copy.deepcopy(dicionario1)
dicionario2
Out[41]:
{'x': 1, 'y': 2, 'z': 3}
In [42]:
#metodo update serve para atualizar valores
#no exemplo atualizou o nome e criou o campo idade
pessoa={
'nome': 'Paulo',
'sobrenome': 'Soares',
}
pessoa.update(nome='Zé', idade=30)
print(pessoa)
{'nome': 'Zé', 'sobrenome': 'Soares', 'idade': 30}
In [43]:
#com o update também é possível atualizar o dicionario com base em uma tupla
tupla = (('nome', 'João'), ('idade', 35))
pessoa.update(tupla)
pessoa
Out[43]:
{'nome': 'João', 'sobrenome': 'Soares', 'idade': 35}
In [45]:
#com o update também é possível atualizar o dicionario com base em uma lista
lista = [['nome', 'Paulo'], ['idade', 38]]
pessoa.update(lista)
pessoa
Out[45]:
{'nome': 'Paulo', 'sobrenome': 'Soares', 'idade': 38}
In [ ]: