A **compreensão de dicionários** em [[Linguagem de programação Python|Python]] é uma forma concisa e eficiente de criar dicionários. Assim como as [[Compreensão de listas em Python|compreensões de lista]], ela permite construir um novo dicionário aplicando uma expressão a cada item de um iterável, opcionalmente filtrando os itens com uma condição.
# Sintaxe Básica
A sintaxe de uma compreensão de dicionários é semelhante à de listas, mas utiliza chaves `{}` e especifica pares `chave: valor`:
```python
novo_dicionario = {chave_expressao: valor_expressao for item in iteravel if condicao}
```
Onde:
- `chave_expressao`: A expressão que define a chave para cada item no novo dicionário.
- `valor_expressao`: A expressão que define o valor para cada item no novo dicionário.
- `item`: A variável que representa cada elemento do iterável.
- `iteravel`: A coleção de elementos sobre a qual iterar.
- `condicao` (opcional): Um filtro para incluir apenas os itens que satisfazem a condição.
# Exemplos
**1. Criando um dicionário a partir de uma lista de tuplas:**
Este é um caso comum onde você tem uma lista de pares (como tuplas) e deseja transformá-los em um dicionário.
```python
dial_codes = [
(880, 'Bangladesh'),
(55, 'Brazil'),
(86, 'China'),
(91, 'India'),
(62, 'Indonesia'),
(81, 'Japan'),
(234, 'Nigeria'),
(92, 'Pakistan'),
(7, 'Russia'),
(1, 'United States'),
]
# Criando um dicionário onde a chave é o nome do país e o valor é o código de discagem
country_dial = {country: code for code, country in dial_codes}
print(country_dial)
# Saída: {'Bangladesh': 880, 'Brazil': 55, 'China': 86, 'India': 91, 'Indonesia': 62, 'Japan': 81, 'Nigeria': 234, 'Pakistan': 92, 'Russia': 7, 'United States': 1}
```
Neste exemplo, `code, country` utiliza o [[Desempacotar sequencias em Python|desempacotamento de tuplas]] para atribuir os elementos de cada tupla nas variáveis `code` e `country` durante a iteração.
**2. Criando um dicionário a partir de uma lista, com transformação e filtro:**
```python
numeros = [1, 2, 3, 4, 5, 6]
# Criar um dicionário onde a chave é o número e o valor é o seu quadrado,
# mas apenas para números pares.
quadrados_pares = {num: num**2 for num in numeros if num % 2 == 0}
print(quadrados_pares)
# Saída: {2: 4, 4: 16, 6: 36}
```
**3. Invertendo um dicionário:**
```python
dicionario_original = {'a': 1, 'b': 2, 'c': 3}
# Invertendo chaves e valores
dicionario_invertido = {valor: chave for chave, valor in dicionario_original.items()}
print(dicionario_invertido)
# Saída: {1: 'a', 2: 'b', 3: 'c'}
```
# Vantagens
* **Concisão**: Permite criar dicionários complexos em uma única linha de código, tornando-o mais legível do que loops `for` tradicionais.
* **Eficiência**: Geralmente mais rápido do que construir dicionários usando loops `for` e o método `dict.update()` ou `dict[key] = value`.
* **Clareza**: A estrutura `chave: valor for item in iteravel` é intuitiva e expressa claramente a intenção de criar um dicionário.
A compreensão de dicionários é uma ferramenta poderosa no Python para manipulação de dados, especialmente quando se trabalha com transformações e filtros em coleções.
:: **Referência** :: [Site oficial do Python sobre compreensões de lista](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)