# Dicionários em Python
Dicionários (DICT) em Python são coleções **não ordenadas** de pares **chave-valor**. Cada chave em um dicionário é única e está associada a um valor correspondente. Pense neles como um dicionário do mundo real, onde cada palavra (chave) tem sua definição (valor).
## Definição e Criação
Dicionários são criados usando chaves `{}` com pares chave-valor separados por dois pontos `:`. Os pares são separados por vírgulas.
**Exemplo:**
```python
# Definindo um Dicionário
Casas = {"Harry": "Grifinória", "Draco": "Sonserina"}
print(Casas)
# Saída: {'Harry': 'Grifinória', 'Draco': 'Sonserina'}
# Acessando um valor pela chave
print(Casas["Harry"])
# Saída: Grifinória
# Adicionando um novo par chave-valor
Casas["Hermione"] = "Grifinória"
print(Casas)
# Saída: {'Harry': 'Grifinória', 'Draco': 'Sonserina', 'Hermione': 'Grifinória'}
# Dicionários são mutáveis, permitindo a alteração de valores
Casas["Draco"] = "Sonserina (Puro-sangue)"
print(Casas)
# Saída: {'Harry': 'Grifinória', 'Draco': 'Sonserina (Puro-sangue)', 'Hermione': 'Grifinória'}
```
## Características Importantes
* **Chaves Únicas:** Cada chave em um dicionário deve ser única. Se você tentar adicionar uma chave que já existe, o valor associado a essa chave será atualizado.
* **Chaves Imutáveis:** As chaves de um dicionário devem ser de tipos de dados imutáveis (como strings, números, tuplas). Listas não podem ser usadas como chaves.
* **Valores Mutáveis:** Os valores associados às chaves podem ser de qualquer tipo de dado e podem ser mutáveis ou imutáveis.
* **Não Ordenados (em versões anteriores ao Python 3.7):** Em versões do Python anteriores à 3.7, a ordem dos itens em um dicionário não era garantida. A partir do Python 3.7, os dicionários mantêm a ordem de inserção.
## Métodos Úteis de Dicionários
* `keys()`: Retorna uma visualização (view) das chaves do dicionário.
* `values()`: Retorna uma visualização das valores do dicionário.
* `items()`: Retorna uma visualização dos pares chave-valor (tuplas) do dicionário.
* `get(key, default=None)`: Retorna o valor para a `key` especificada. Se a `key` não for encontrada, retorna `default` (que é `None` por padrão), em vez de gerar um `KeyError`.
* `pop(key, default=None)`: Remove o item com a `key` especificada e retorna seu valor. Se a `key` não for encontrada, retorna `default`.
* `popitem()`: Remove e retorna um par chave-valor arbitrário (em versões anteriores ao Python 3.7) ou o último par inserido (a partir do Python 3.7).
* `update(other_dict)`: Atualiza o dicionário com os pares chave-valor de `other_dict`, sobrescrevendo chaves existentes.
* `len(d)`: Retorna o número de itens (pares chave-valor) no dicionário.
**Exemplos de Métodos:**
```python
Casas = {"Harry": "Grifinória", "Draco": "Sonserina", "Hermione": "Grifinória"}
# Obter chaves
print(Casas.keys())
# Saída: dict_keys(['Harry', 'Draco', 'Hermione'])
# Obter valores
print(Casas.values())
# Saída: dict_values(['Grifinória', 'Sonserina', 'Grifinória'])
# Obter itens (pares chave-valor)
print(Casas.items())
# Saída: dict_items([('Harry', 'Grifinória'), ('Draco', 'Sonserina'), ('Hermione', 'Grifinória')])
# Usando get()
print(Casas.get("Harry"))
# Saída: Grifinória
print(Casas.get("Rony", "Não encontrado")) # Retorna o valor padrão se a chave não existir
# Saída: Não encontrado
# Usando pop()
valor_removido = Casas.pop("Draco")
print(f"Valor removido: {valor_removido}")
print(f"Dicionário após pop: {Casas}")
# Saída:
# Valor removido: Sonserina
# Dicionário após pop: {'Harry': 'Grifinória', 'Hermione': 'Grifinória'}
# Usando popitem()
ultimo_item = Casas.popitem()
print(f"Último item removido: {ultimo_item}")
print(f"Dicionário após popitem: {Casas}")
# Saída (a ordem pode variar em versões < 3.7):
# Último item removido: ('Hermione', 'Grifinória')
# Dicionário após popitem: {'Harry': 'Grifinória'}
# Usando update()
novos_dados = {"Rony": "Grifinória", "Gina": "Grifinória"}
Casas.update(novos_dados)
print(f"Dicionário após update: {Casas}")
# Saída: {'Harry': 'Grifinória', 'Rony': 'Grifinória', 'Gina': 'Grifinória'}
# Usando len()
print(f"Número de itens: {len(Casas)}")
# Saída: Número de itens: 3
```
## Quando Usar Dicionários?
Dicionários são extremamente úteis quando você precisa:
* Associar informações relacionadas (como um nome a um número de telefone, um ID a um registro de usuário).
* Acessar dados rapidamente usando uma chave identificadora.
* Representar estruturas de dados onde a ordem não é o fator principal, mas sim a relação entre os dados.
---
**:: Referência::** [Python Documentation on Native Types](https://docs.python.org/3/library/stdtypes.html)