-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7d6bc92
commit 13b4f48
Showing
1 changed file
with
219 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,219 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"# Dicionários" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## Definição" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Um dicionário em Python é uma estrutura de dados que armazena pares de chave-valor. É a primeira estrutura **não ordenada** que vamos aprender.\n", | ||
"\n", | ||
"Cada chave deve ser única e imutável (por exemplo, uma string, um número ou uma tupla), enquanto os valores podem ser de qualquer tipo, incluindo listas, listas e até mesmo outros dicionários. \n", | ||
"\n", | ||
"Os dicionários são úteis para armazenar dados que precisam ser rapidamente acessíveis por uma chave descritiva." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## Sintaxe básica" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Um dicionário é definido usando chaves `{}` e cada par de chave-valor é separado por dois pontos `:`. Os pares são separados por vírgulas `,`." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"{'nome': 'João', 'idade': 30, 'cidade': 'São Paulo'}\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"pessoa = {\n", | ||
" \"nome\": \"João\",\n", | ||
" \"idade\": 30,\n", | ||
" \"cidade\": \"São Paulo\"\n", | ||
"}\n", | ||
"print(pessoa)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## Operações básicas com dicionários" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"### Acessando valores a partir da chave" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Lembra que listas e tuplas podemos acessar os elementos pela índice? Pois bem, em dicionário é como se nós déssemos nomes aos índices. Os índices passam a ser as nossas chaves. E ao acessarmos a chave de um dicionário o valor é retornado." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 2, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"João\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"pessoa = {\n", | ||
" \"nome\": \"João\",\n", | ||
" \"idade\": 30,\n", | ||
" \"cidade\": \"São Paulo\"\n", | ||
"}\n", | ||
"print(pessoa[\"nome\"])" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Note que não existe mais o acesso por índices ou posições, como era em listas e tuplas. Por este motivo, os dicionários são estruturas **não ordenadas**. Não há uma ordem (primeiro, segundo, terceiro) para acessarmos os valores. Vejamos o que acontece caso busquemos pelo primeiro par de chaves e valores através de índices:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": { | ||
"tags": [ | ||
"raises-exception" | ||
] | ||
}, | ||
"outputs": [ | ||
{ | ||
"ename": "KeyError", | ||
"evalue": "0", | ||
"output_type": "error", | ||
"traceback": [ | ||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | ||
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", | ||
"Cell \u001b[1;32mIn[3], line 6\u001b[0m\n\u001b[0;32m 1\u001b[0m pessoa \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 2\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnome\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mJoão\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 3\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124midade\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;241m30\u001b[39m,\n\u001b[0;32m 4\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcidade\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSão Paulo\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 5\u001b[0m }\n\u001b[1;32m----> 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mpessoa\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m)\n", | ||
"\u001b[1;31mKeyError\u001b[0m: 0" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"pessoa = {\n", | ||
" \"nome\": \"João\",\n", | ||
" \"idade\": 30,\n", | ||
" \"cidade\": \"São Paulo\"\n", | ||
"}\n", | ||
"print(pessoa[0])" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Esse erro `KeyError: 0` indica que ele buscou pelo 0 (zero) nas chaves do meu dicionário, mas de fato eu não tenho. Eu só tenho `nome`, `idade` e `cidade`. Em resumo, o erro significa \"chave 0 não encontrada\"." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"### Modificando o dicionário" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Dicionários são mutáveis assim como listas. Ou seja, uma vez criado, eu consigo modificar seus valores, bem como acrescentar ou remover outros pares de chave e valor.\n", | ||
"\n", | ||
"Se buscarmos por uma chave, por exemplo, `profissao`, no dicionário `pessoa` criado acima através da notação `pessoa[\"profissao\"]` vamos receber a mensagem de erro `KeyError: 'profissão'`, conforme já vimos. Porém, podemos atribuir um valor a esta chave inexistente, e ela será criada.\n", | ||
"\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# pessoa não possui a chave profissão\n", | ||
"pessoa = {\n", | ||
" \"nome\": \"João\",\n", | ||
" \"idade\": 30,\n", | ||
" \"cidade\": \"São Paulo\"\n", | ||
"}\n", | ||
"\n", | ||
"# Aqui não estamos acessando a chave profissão, mas sim criando-a!\n", | ||
"pessoa[\"profissao\"] = \"desenvolvedor\"" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"```{admonition} Nota (acessar vs atribuir)\n", | ||
":class: note\n", | ||
"\n", | ||
"Lembre-se que acessar um valor é diferente de atribuir um valor à uma chave. O acesso requer que a chave exista, e a atribuição, caso a chave não exista, ela será criada.\n", | ||
"```\n", | ||
"\n" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": ".venv", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.12.2" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |