Dicionários

Os dicionários do Python, ou dictionaries (também comumente referenciados como dicts), são mais uma estrutura para armazenar dados. Ao contrário de listas e tuplas, dicionários são não sequenciais, armazenando o que são chamados pares chave-valor. Ou seja, o índice, ao invés de ser um número sequencial, como nas listas, é definido pelo próprio usuário, podendo ser um número, string, um objeto.

Criando um dicionário, acessando e modificando suas informações

Para criar um dicionário, usamos as chaves ({}). Os elementos seguem o formato “chave” : “valor”. Vejamos no exemplo para que fique mais claro:

aluno = {"nome": "José", "idade": 20, "nota": 9.2}
print(aluno)

> {'nome': 'José', 'idade': 20, 'nota': 9.2}

Como já se deve imaginar, é possível criar um dicionário vazio, definindo apenas as chaves, sem elementos dentro:

dict_vazio = {}
print(dict_vazio)

> {}

Para acessar os dados de um dicionário, usamos o mesmo formato das listas. Porém, como o índice é nomeado, usaremos o nome para resgatar o valor, ao invés do índice numérico:

print(aluno["nome"])
print(aluno["idade"])

> José
> 20

Se tentarmos acessar uma chave que não existe no dicionário, o Python retorna um erro:

print(aluno["Peso"])

> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> KeyError: 'Peso'

Para modificar um valor, novamente, fazemos como nas listas. Basta indicar a chave que se deseja alterar e definir o novo valor. A inclusão de um novo item no dicionário é feita da mesma forma, utilizando uma chave que ainda não foi utilizada no mesmo:

aluno["nota"] = 8.2
aluno["peso"] = 74
print(aluno)

> {'idade': 20, 'nome': 'José', 'nota': 8.2, 'peso': 74}

Repare como a chave "peso" e seu valor foram adicionados, além da alteração no valor da chave "nota".

Para remover uma determinada chave e seu valor, usamos o del. Para apagar todas as chaves e valores, usamos o método clear, chamado através do dicionário:

del aluno["idade"]
print(aluno)
aluno.clear()
print(aluno)

> {'nome': 'José', 'nota': 8.2, 'peso': 74}
> {}

Funções úteis para trabalhar com dicionários

Algumas das funções que utilizamos com as listas também funcionam com os dicionários. É o caso da função len(), por exemplo, que retorna a quantidade de pares chave : valor do dicionário (vamos aproveitar para redefinir o dicionário aluno que limpamos no último exemplo:

aluno = {"nome": "José", "idade": 20, "nota": 9.2}
print(len(aluno))

> 3

Outra funcionalidade que também funciona com dicionários é a verificação da existência de uma chave através do in:

print("idade" in aluno)
print("peso" in aluno)

> True
> False

Mas temos outras funções úteis para trabalhar com dicionários. Vamos ver algumas delas.

get()

A função get() é muito útil para evitar erros de chave inexistente. Ela recebe dois parâmetros, que são a chave a ser buscada e um valor de retorno. Ela retorna o valor de desta chave se ela existir no dicionário, e se não existir, retorna aquilo que definimos como valor de retorno, ou None se nenhum valor de retorno for definido:

aluno = {"nome": "José", "idade": 20, "nota": 9.2}
print(aluno.get("nome"))
print(aluno.get("peso"))
print(aluno.get("peso", "Não existe"))

> José
> None
> Não existe

items(), keys() e values()

A função items() retorna uma lista de tuplas com os pares “chave” : valor. Já a função keys() retorna uma lista apenas com as chaves do dicionário. E a função values() retorna uma lista apenas com os valores dos itens do dicionário:

print(aluno.items())
print(aluno.keys())  
print(aluno.values())

> dict_items([('idade', 20), ('nota', 9.2), ('nome', 'José')])
> dict_keys(['idade', 'nota', 'nome'])
> dict_values([20, 9.2, 'José'])

update()

A função update() recebe um dicionário como parâmetro e insere os pares deste dicionário parâmetro no dicionário através do qual a função é chamada. Caso existam chaves coincidentes, o dicionário através do qual a função foi chamada é atualizada com os valores do dicionário passado como parâmetro:

aluno_original = {"nome": "José", "idade": 20, "nota": 9.2}
aluno_update = {"peso": 75, "nota": 8.7}
aluno_original.update(aluno_update)
print(aluno_original)

> {'nome': 'José', 'idade': 20, 'nota': 8.7, 'peso': 75}

Como podem ver, a chave "peso" foi adicionada e o valor da chave "nota" foi modificado.

Conclusão

Neste capítulo aprendemos sobre os dicionários e sua principal diferença para listas. Vimos como criar um dicionário, atualizar e acessar suas informações e também funções que podem vir a ser muito úteis ao trabalhar com eles. No próximo capítulo, veremos rapidamente os sets.