Dict Comprehensions no Python

Cansado de programar?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Projetos práticos

Projetos práticos voltados para o mercado de trabalho

Prática profissional

Formação moderna com foco na prática profissional

Download do Artigo

✅ Atualizado para Python 3.13 (Dezembro 2025) Conteúdo enriquecido com benchmarks de performance, casos de uso do mundo real, comparações de abordagens e análise de quando NÃO usar.

Fala grande Dev!

Dict Comprehensions são uma das ferramentas mais elegantes do Python para criar e transformar dicionários. Elas são até 2.5x mais rápidas que loops tradicionais e tornam seu código mais pythonico e expressivo.

Neste guia completo, você vai aprender:

  • ✅ Sintaxe e padrões de dict comprehensions
  • ✅ Benchmarks de performance vs loops e dict()
  • ✅ Casos de uso reais (JSON, APIs, transformação de dados)
  • ✅ Comparação com alternativas (dict(), fromkeys(), defaultdict)
  • ✅ Quando NÃO usar (legibilidade)

Ainda não domina List Comprehensions? :scream:

Recomendo fortemente ler nosso guia completo de List Comprehensions primeiro, já que Dict Comprehensions seguem a mesma lógica!

Já voltou? Então bora pro dict! :wink:

Vá Direto ao Assunto…

O início de tudo: o dict

Antes de tudo, vamos falar rapidamente sobre o tipo de dado dict. (Se você já sabe, pode pular essa seção :wink:)

Dicionário em Python é uma coleção de dados sem ordem onde cada elemento possui um par chave/valor.

E o que é um par chave/valor?

Basicamente é uma forma de se indexar um valor a partir de uma chave.

Isso dá acesso eficiente (pros puristas, temos O(1) aqui!) aos valores da estrutura de dados.

A sintaxe para criar dicionários é a seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Dicionário vazio
dicionario = {}

# Dicionário comum
dicionario = {'jedi': 10, 'sith': 7}

# Dicionário com chaves inteiras
dicionario = {1: 'Baby Yoda', 2: 'Yoda'}

# Dicionário misturado
dicionario = {'especie': 'Humano', 1: ['Obi Wan Kenobi', 'Qui-Gon Jinn']}

# Outra forma de criação, usando dict()
dicionario = dict({'jedi': 10, 'sith': 7})

Já para acessar elementos:

1
2
3
4
5
6
7
8
9
10
11
12
13
dicionario = {'nome': 'Vinícius Ramos', 'idade': 29}

# Saída: Vinícius
print(dicionario['nome'])

# Saída: 29
print(dicionario.get('idade'))

# Caso não encontre, devolva o valor None
print(dicionario.get('altura', None))

# Será lançada uma exceção KeyError
print(dicionario['endereco'])

Para atualizar valores:

1
2
3
4
5
dicionario = {'nome': 'Vinícius Ramos', 'idade': 29, 'empresa': 'PythonAcademy'}

# Atualiza dados
dicionario['idade'] = 30
dicionario['empresa'] = 'PythonAcademy Inc.'

Para remover elementos:

1
2
3
4
5
6
7
8
9
10
11
12
13
dicionario = {'nome': 'Vinícius Ramos', 'idade': 29, 'empresa': 'PythonAcademy'}

# Remove a chave/valor 'idade': 29
dicionario.pop('idade')

# Remove um par aleatório
dicionario.popitem()

# Remove todos os itens
dicionario.clear()

# Deleta 'empresa'
del dicionario['empresa']

Pronto! Você agora é um expert em Dicionários!

Agora vamos pro prato principal: Dict Comprehension!

Antes que eu me esqueça! Se não é inscrito no canal, curta, dê um jóinh…..

Ops! Canal errado! :satisfied:

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Dict Comprehensions

Dict Comprehensions foram introduzidas na linguagem através da especificação PEP 274.

Sua sintaxe básica é:

1
{chave: valor for elemento in iteravel}

Agora respira que vamos entender cada ponto:

  • chave: será a chave de cada elemento do dicionário resultante.
  • valor: valor daquela chave.
  • elemento: é a unidade de iteração do iterável iterável (se for uma lista, por exemplo, elemento irá receber o valor iteração à iteração)
  • iteravel: conjunto de dados que estão sendo iterados (pode ser uma lista ou um set, por exemplo)

Pra esclarecer, vamos à um exemplo:

1
dicionario = {elemento: elemento*2 for elemento in range(6)}

Aqui, cada elemento da lista resultante de range(6) (0, 1, 2, 3, 4, 5) será convertido em:

  • Uma chave com o mesmo valor do elemento da lista.
  • elemento*2 é o valor de cada chave (multiplicar por 2 cada elemento).

O resultado será:

1
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10}

Outro exemplo, com chaves alfabéticas e manipulação de strings com f-strings:

1
2
3
4
lista = ['Ferrari', 'Lamborghini', 'Porsche']
dicionario = {
  f'{elemento.lower()}': f'Montadora: {elemento.upper()}' for elemento in lista
}

Resultando em:

1
2
3
4
5
{
  'ferrari': 'Montadora: FERRARI',
  'lamborghini': 'Montadora: LAMBORGHINI',
  'porsche': 'Montadora: PORSCHE'
}

Também é possível iterar sobre um outro dicionário através do método items().

Ele retorna a chave e o valor de cada elemento do dicionário de entrada.

Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import locale

# Configura o locale pra Português do Brasil (pt_BR)
locale.setlocale(locale.LC_MONETARY, 'pt_BR.utf8')

carros_esportivos = {
  'ferrari': 1299000,
  'lamborghini': 1100000,
  'porsche': 759000
}

dict_saida = {
  chave: f'{chave.upper()}: {locale.currency(valor)}' for chave, valor in carros_esportivos.items()
}

Essa seria a saída:

1
2
3
4
5
{
  'ferrari': 'FERRARI: R$ 1299000,00',
  'lamborghini': 'LAMBORGHINI: R$ 1100000,00',
  'porsche': 'PORSCHE: R$ 759000,00'
}

Legal não é mesmo?!

Assim como acontece em List Comprehensions, também podemos adicionar lógica condicional (if/else).

Performance: Dict Comprehension vs Loops

Uma das principais vantagens de dict comprehensions é a performance. Vamos medir com dados reais!

Benchmark 1: Criar Dicionário Simples

Vamos comparar criar um dicionário mapeando números aos seus quadrados:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import timeit

setup = "data = range(10000)"

# Método 1: For loop tradicional
for_loop = """
result = {}
for x in data:
    result[x] = x**2
"""

# Método 2: Dict comprehension
dict_comp = "{x: x**2 for x in data}"

# Método 3: Função dict() + zip
dict_zip = "dict(zip(data, (x**2 for x in data)))"

# Executar 1000 vezes e medir tempo
time_loop = timeit.timeit(for_loop, setup, number=1000)
time_comp = timeit.timeit(dict_comp, setup, number=1000)
time_zip = timeit.timeit(dict_zip, setup, number=1000)

print(f"For loop:          {time_loop:.4f}s")
print(f"Dict comprehension: {time_comp:.4f}s")
print(f"dict() + zip:      {time_zip:.4f}s")
print(f"\nDict comp é {time_loop/time_comp:.2f}x mais rápida que loop!")
print(f"Dict comp é {time_zip/time_comp:.2f}x mais rápida que zip!")

Resultado típico (Python 3.13):

1
2
3
4
5
6
For loop:          3.2145s
Dict comprehension: 1.2834s
dict() + zip:      2.1567s

Dict comp é 2.51x mais rápida que loop!
Dict comp é 1.68x mais rápida que zip!

Por que Dict Comprehensions são mais rápidas?

  1. Otimização do interpretador: Python detecta dict comprehensions e otimiza o bytecode
  2. Menos chamadas de função: Não precisa chamar dict.__setitem__() a cada iteração
  3. Pré-alocação: Dict comprehension estima tamanho quando possível

Benchmark 2: Transformar Dicionário Existente

Vamos inverter chaves e valores de um dicionário:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import timeit

setup = "data = {str(i): i for i in range(10000)}"

# For loop
for_loop = """
result = {}
for k, v in data.items():
    result[v] = k
"""

# Dict comprehension
dict_comp = "{v: k for k, v in data.items()}"

time_loop = timeit.timeit(for_loop, setup, number=1000)
time_comp = timeit.timeit(dict_comp, setup, number=1000)

print(f"For loop:          {time_loop:.4f}s")
print(f"Dict comprehension: {time_comp:.4f}s")
print(f"Diferença: {((time_loop - time_comp) / time_loop * 100):.1f}% mais rápido")

Resultado típico:

1
2
3
For loop:          2.8934s
Dict comprehension: 1.4521s
Diferença: 49.8% mais rápido

💡 Dica Pro: Dict comprehensions são especialmente eficientes para transformações e filtros, onde a vantagem pode chegar a 50%!

Comparação de Abordagens: Quando Usar Cada Uma?

1. Dict Comprehension vs dict() + zip()

1
2
3
4
5
6
7
8
chaves = ['a', 'b', 'c']
valores = [1, 2, 3]

# Método 1: dict() + zip() - clássico
result = dict(zip(chaves, valores))

# Método 2: Dict comprehension - moderno
result = {k: v for k, v in zip(chaves, valores)}

Use dict() + zip() quando:

  • ✅ Já tem duas listas prontas de chaves e valores
  • ✅ Não precisa transformar os dados
  • ✅ Prioriza legibilidade

Use dict comprehension quando:

  • ✅ Precisa transformar chaves ou valores
  • ✅ Precisa filtrar elementos
  • ✅ Quer performance máxima

2. Dict Comprehension vs dict.fromkeys()

1
2
3
4
5
6
7
8
9
10
11
12
13
chaves = ['a', 'b', 'c']

# Método 1: fromkeys() - inicializa com valor padrão
result = dict.fromkeys(chaves, 0)
# {'a': 0, 'b': 0, 'c': 0}

# Método 2: Dict comprehension - mais flexível
result = {k: 0 for k in chaves}
# {'a': 0, 'b': 0, 'c': 0}

# Vantagem: valores diferentes por chave
result = {k: len(k) for k in chaves}
# {'a': 1, 'b': 1, 'c': 1}

Use fromkeys() quando:

  • ✅ Todas as chaves têm o mesmo valor inicial
  • ✅ Não precisa de transformação

Use dict comprehension quando:

  • ✅ Cada chave tem valor diferente
  • ✅ Valor depende da chave ou de lógica

3. Dict Comprehension vs collections.defaultdict

1
2
3
4
5
6
7
8
9
10
11
12
from collections import defaultdict

# defaultdict - ótimo para agrupamentos
result = defaultdict(list)
for item in ['a1', 'b2', 'a3', 'b4']:
    result[item[0]].append(item)
# {'a': ['a1', 'a3'], 'b': ['b2', 'b4']}

# Dict comprehension - mais explícito
items = ['a1', 'b2', 'a3', 'b4']
result = {k: [x for x in items if x.startswith(k)] for k in set(x[0] for x in items)}
# {'a': ['a1', 'a3'], 'b': ['b2', 'b4']}

Use defaultdict quando:

  • ✅ Construindo dict incrementalmente (loop)
  • ✅ Agrupando ou acumulando valores
  • ✅ Não sabe as chaves antecipadamente

Use dict comprehension quando:

  • ✅ Já tem todos os dados
  • ✅ Transformação declarativa e única
  • ✅ Performance crítica

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Casos de Uso do Mundo Real

Vamos ver exemplos práticos que você pode usar no dia a dia:

1. Processar Resposta de API (JSON)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests

# Buscar dados de usuários de uma API
response = requests.get('https://jsonplaceholder.typicode.com/users')
users = response.json()

# Criar dicionário: id -> email
users_dict = {user['id']: user['email'] for user in users}

print(users_dict)
# {1: '[email protected]', 2: '[email protected]', ...}

# Filtrar apenas usuários com domínio .net
net_users = {
    user['id']: user['email']
    for user in users
    if user['email'].endswith('.net')
}

2. Inverter Mapeamento (Chave ↔ Valor)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Dicionário original: código -> nome
products = {
    'P001': 'Notebook',
    'P002': 'Mouse',
    'P003': 'Teclado'
}

# Inverter: nome -> código (para busca reversa)
reverse_products = {name: code for code, name in products.items()}

print(reverse_products)
# {'Notebook': 'P001', 'Mouse': 'P002', 'Teclado': 'P003'}

# Buscar código pelo nome
code = reverse_products['Mouse']  # 'P002'

3. Agrupar Dados por Categoria

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Lista de transações
transactions = [
    {'id': 1, 'category': 'food', 'amount': 50},
    {'id': 2, 'category': 'transport', 'amount': 30},
    {'id': 3, 'category': 'food', 'amount': 80},
    {'id': 4, 'category': 'transport', 'amount': 20},
]

# Somar por categoria usando dict comprehension
category_totals = {
    cat: sum(t['amount'] for t in transactions if t['category'] == cat)
    for cat in set(t['category'] for t in transactions)
}

print(category_totals)
# {'food': 130, 'transport': 50}

4. Limpar e Normalizar Dados CSV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import csv

# Ler CSV e criar dict normalizado
with open('produtos.csv') as f:
    reader = csv.DictReader(f)

    # Normalizar: lowercase keys, strip whitespace, converter preço
    products = {
        row['id'].strip(): {
            'name': row['name'].strip().title(),
            'price': float(row['price'].replace(',', '.')),
            'stock': int(row['stock'])
        }
        for row in reader
        if row['id']  # Ignorar linhas vazias
    }

print(products)
# {'001': {'name': 'Notebook', 'price': 2500.0, 'stock': 10}, ...}

5. Criar Lookup Table (Cache)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Lista de produtos
products = [
    {'id': 1, 'name': 'Notebook', 'price': 2500},
    {'id': 2, 'name': 'Mouse', 'price': 50},
    {'id': 3, 'name': 'Teclado', 'price': 150},
]

# Criar lookup table para acesso O(1)
product_lookup = {p['id']: p for p in products}

# Busca instantânea por ID
product = product_lookup[2]
print(product)  # {'id': 2, 'name': 'Mouse', 'price': 50}

# Muito mais rápido que:
# product = next((p for p in products if p['id'] == 2), None)

:bulb: Estou construindo o Ebookr.ai, uma plataforma onde você cria ebooks profissionais com IA sobre qualquer assunto - do zero ao PDF pronto, com capas e infográficos gerados automaticamente. Dá uma olhada!

Dict Comprehensions com if

Podemos adicionar lógica condicional à construção do dicionário resultante do nosso Dict Comprehension.

Podemos adicionar uma expressão condicional em três posições distintas:

Na construção da chave. Sintaxe:

1
{chave if condicao: valor for elemento in iteravel}

Na expressão que definirá o valor da chave:

1
{chave: valor if condicao for elemento in iteravel}

Ao final da expressão, filtrando os dados do iterável:

1
{chave: expressao for elemento in iteravel if condicao}

Podendo ser um mix da primeira versão, segunda ou terceira (Aí o bagulho fica lôco!).

Por exemplo, se quisermos filtrar o dicionário de carros esportivos acima, pegando apenas aqueles com valor superior à R$ 1.000.000,00?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import locale

# Configura o locale pra Português do Brasil (pt_BR)
locale.setlocale(locale.LC_MONETARY, 'pt_BR.utf8')

carros_esportivos = {
  'ferrari': 1299000,
  'lamborghini': 1100000,
  'porsche': 759000
}

dict_saida = {
  chave: f'{chave.upper()}: {locale.currency(valor)}'
  for chave, valor in carros_esportivos.items() if valor > 1000000
}

Resultaria em:

1
2
3
4
{
  'ferrari': 'FERRARI: R$ 1299000,00',
  'lamborghini': 'LAMBORGHINI: R$ 1100000,00'
}

Combinar comprehensions com condições é o tipo de fundamento que sustenta projetos maiores - é essa base que a Jornada Python constrói com você, do zero ao Django:

Dict Comprehensions com vários if

E se quisermos alterar a chave e o valor na mesma expressão? :thinking:

Podemos fazer da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import locale

# Configura o locale pra Português do Brasil (pt_BR)
locale.setlocale(locale.LC_MONETARY, 'pt_BR.utf8')

carros_esportivos = {
  'ferrari': 1299000,
  'lamborghini': 1100000,
  'porsche': 759000
}

dict_saida = {
  chave if valor > 1000000 else f'{chave}-valor-abaixo':
    f'{chave.upper()}: {locale.currency(valor)}'
    if valor > 1000000 else f'{chave.upper()}: Valor abaixo de R$ 1.000.000,00'
  for chave, valor in carros_esportivos.items()
}

Nesse exemplo:

  • Chave será f'{chave}-valor-abaixo' caso valor seja menor que 1000000.
  • Valor será f'{chave.upper()}: Valor abaixo de R$ 1.000.000,00' caso valor seja menor que 1000000.

O resultado seria:

1
2
3
4
5
{
  'ferrari': 'FERRARI: R$ 1299000,00',
  'lamborghini': 'LAMBORGHINI: R$ 1100000,00',
  'porsche-valor-abaixo': 'Valor abaixo de R$ 1.000.000,00'
}

Contudo, aqui vai uma dica.

Percebeu o quão “embolado” ficou o código?

Não é por que o Python possibilite isso, que seja uma boa ideia utilizá-lo dessa forma.

Nunca se esqueçam do primeiro Zen do Python: “Bonito é melhor que feio”.

Ainda não conhece o explicativo do “Zen do Python” da Python Academy? :scream:

Conheça o Zen of Python clicando aqui) e se possível, o tatue no braço.

Brincadeira, só tatuá-lo já serve! :satisfied:

Quando NÃO Usar Dict Comprehensions

Dict comprehensions são poderosas, mas podem prejudicar legibilidade quando mal usadas.

❌ Exemplo RUIM 1: Muito Complexo

1
2
3
4
5
6
7
8
9
10
# ❌ NÃO FAÇA ISSO - Ilegível!
result = {
    user['id']: {
        'name': user['name'].upper(),
        'total': sum(order['price'] for order in user['orders'] if order['status'] == 'paid'),
        'last_order': max((o['date'] for o in user['orders'] if o['status'] == 'paid'), default=None)
    }
    for user in users
    if user['active'] and len([o for o in user['orders'] if o['status'] == 'paid']) > 0
}

Problemas:

  • Múltiplos níveis de aninhamento
  • Lógica complexa repetida
  • Impossível debugar
  • Difícil de testar

✅ Solução: Quebrar em Funções

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ✅ FAÇA ISSO - Legível e testável!
def get_paid_orders(user):
    """Retorna pedidos pagos do usuário"""
    return [o for o in user['orders'] if o['status'] == 'paid']

def calculate_user_total(user):
    """Calcula total de pedidos pagos"""
    paid_orders = get_paid_orders(user)
    return sum(order['price'] for order in paid_orders)

def get_last_order_date(user):
    """Retorna data do último pedido pago"""
    paid_orders = get_paid_orders(user)
    return max((o['date'] for o in paid_orders), default=None)

def is_valid_user(user):
    """Verifica se usuário é válido"""
    return user['active'] and len(get_paid_orders(user)) > 0

# Agora fica claro e testável
result = {
    user['id']: {
        'name': user['name'].upper(),
        'total': calculate_user_total(user),
        'last_order': get_last_order_date(user)
    }
    for user in users
    if is_valid_user(user)
}

❌ Exemplo RUIM 2: Side Effects

1
2
3
4
5
6
7
8
9
10
11
12
# ❌ NÃO FAÇA ISSO - Side effects!
counter = 0
result = {
    k: (counter := counter + 1)  # Modifica variável externa
    for k in keys
}

# ❌ Pior ainda: I/O em dict comprehension
result = {
    k: print(f"Processing {k}") or v  # Print é side effect!
    for k, v in data.items()
}

✅ Solução: Use For Loop

1
2
3
4
5
6
7
8
9
# ✅ FAÇA ISSO - Explícito e claro
result = {}
counter = 0

for k in keys:
    counter += 1
    result[k] = counter
    print(f"Processing {k}: {counter}")
    log.info(f"Added {k}")

Regras de Legibilidade

✅ Use dict comprehensions quando:

  1. Cabe em 1-3 linhas (máx 100 caracteres)
  2. Lógica simples (1 filtro, 1 transformação)
  3. Não precisa de debug complexo
  4. Não tem side effects

❌ Evite dict comprehensions quando:

  1. Múltiplos níveis de aninhamento
  2. Lógica complexa com vários if/else
  3. Precisa imprimir valores intermediários (debug)
  4. Usa side effects (I/O, modificar estado externo)
  5. Chaves duplicadas possíveis (behavior indefinido)

Problema: Chaves Duplicadas

1
2
3
4
5
6
7
8
9
10
11
# ❌ Cuidado: última chave sobrescreve!
data = [('a', 1), ('b', 2), ('a', 3)]
result = {k: v for k, v in data}
print(result)  # {'a': 3, 'b': 2} - perdeu o valor 1!

# ✅ Melhor: usar defaultdict para agrupar
from collections import defaultdict
result = defaultdict(list)
for k, v in data:
    result[k].append(v)
print(dict(result))  # {'a': [1, 3], 'b': [2]}

💡 Lembre-se: Código legível é mais importante que código conciso. Se levar 5 minutos para entender sua dict comprehension, use um loop normal!

Conclusão

Neste guia completo sobre Dict Comprehensions, você aprendeu:

✅ Sintaxe e padrões - Do básico ao aninhamento
✅ Performance real - Dict comp até 2.5x mais rápida que loops
✅ Comparações - dict() + zip, fromkeys(), defaultdict
✅ Casos de uso reais - APIs, JSON, CSV, lookup tables, agrupamentos
✅ Quando NÃO usar - Legibilidade é mais importante que concisão

Principais lições:

  • Dict comprehensions são rápidas e concisas para transformações
  • Use dict() + zip quando já tem listas prontas
  • Use fromkeys() quando todas as chaves têm o mesmo valor
  • Use defaultdict para construção incremental
  • Mantenha legibilidade - se está complexo demais, use loop normal
  • Evite side effects em dict comprehensions

Agora que você domina dict comprehensions, use com sabedoria! Lembre-se: código legível é mais importante que código conciso.

Próximos passos:

  • Pratique com seus próprios dados
  • Explore List Comprehensions (se ainda não conhece)
  • Experimente com Set Comprehensions
  • Combine com ferramentas como itertools e functools

Então… Mão na massa! :muscle: :muscle:

Quer praticar dict comprehensions e o resto da base do Python construindo projetos guiados? Conheça a Jornada Python, nosso curso de Python completo.

Até o próximo post!

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.