Skip to content

Commit

Permalink
feat: início capítulo dicionários
Browse files Browse the repository at this point in the history
  • Loading branch information
HenriqueAJNB committed Jul 28, 2024
1 parent 7d6bc92 commit 13b4f48
Showing 1 changed file with 219 additions and 0 deletions.
219 changes: 219 additions & 0 deletions book/06-estruturas-de-dados/04-dicionarios.ipynb
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
}

0 comments on commit 13b4f48

Please sign in to comment.