Módulo 2 - Compreensões de lista, dicionário e conjunto

Compreensão de dicionário

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Escrever uma compreensão de dicionário no formato {chave: valor for ...}.
  • Construir um dicionário a partir de duas listas com zip.
  • Inverter um dicionário, trocando chaves por valores.
  • Filtrar pares de um dicionário com um if.

Chaves e o par chave: valor

A ideia é a mesma da compreensão de lista, com duas mudanças. Primeiro, você troca os colchetes por chaves, porque o resultado é um dicionário. Segundo, em vez de uma única expressão, você informa duas, separadas por dois-pontos: a da esquerda vira a chave e a da direita vira o valor. Todo o resto (o for, os filtros) funciona igual. Se você entendeu a compreensão de lista, esta é um passo pequeno.

numeros = [1, 2, 3, 4]

quadrados = {n: n * n for n in numeros}

print(quadrados)  # {1: 1, 2: 4, 3: 9, 4: 16}

Chaves { }, e o par n: n * n. A esquerda vira chave, a direita vira valor.

TipoDelimitadorCorpo da expressão
Lista[ ]uma expressão: n * 2
Dicionário{ }um par: chave: valor
Conjunto{ }uma expressão: n * 2

Dicionário e conjunto usam chaves; o par com dois-pontos é o que distingue o dicionário.

Casos úteis do dia a dia

A compreensão de dicionário resolve tarefas que apareciam o tempo todo com laços longos. Uma delas é montar um dicionário a partir de duas listas paralelas, uma com as chaves e outra com os valores, usando a função zip para casá-las item a item. Outra é indexar uma sequência, criando um dicionário que liga cada item à sua posição. Em ambos os casos, o que era um laço de várias linhas vira uma expressão que se lê de uma vez.

produtos = ["arroz", "feijao", "cafe"]
precos = [22.90, 8.50, 15.00]

tabela = {nome: preco for nome, preco in zip(produtos, precos)}

print(tabela)  # {'arroz': 22.9, 'feijao': 8.5, 'cafe': 15.0}

zip casa produtos com precos, e a compreensão monta o dicionário nome para preço.

Inverter um dicionário é outro clássico. Às vezes você tem nome para código e precisa de código para nome; basta percorrer os pares com items() e escrever o par ao contrário. Funciona bem quando os valores são únicos, porque chaves de dicionário não se repetem. Se dois valores forem iguais, um vai sobrescrever o outro, então é um caso a usar com consciência do que os dados contêm.

codigos = {"arroz": "A1", "feijao": "B2", "cafe": "C3"}

invertido = {codigo: nome for nome, codigo in codigos.items()}

print(invertido)  # {'A1': 'arroz', 'B2': 'feijao', 'C3': 'cafe'}

items() dá os pares; escrever codigo: nome inverte chaves e valores.

Filtrar pares com um if

Assim como na lista, você pode filtrar quais pares entram no dicionário novo com um if no fim. A condição pode olhar a chave, o valor ou os dois. Isso é ótimo para peneirar um dicionário grande e ficar só com o que interessa, sem criar um dicionário vazio e ir preenchendo com laço. O exemplo pega uma tabela de preços e monta outra só com os itens acima de dez reais, mantendo a estrutura chave para valor.

precos = {"arroz": 22.90, "feijao": 8.50, "cafe": 15.00, "sal": 3.00}

caros = {nome: preco for nome, preco in precos.items() if preco > 10}

print(caros)  # {'arroz': 22.9, 'cafe': 15.0}

O if no fim filtra: só os pares com preço acima de dez reais entram.

Teste rápido

Qual compreensão cria {"a": 1, "b": 2, "c": 3} a partir de letras = "abc"?

Perguntas frequentes

Qual a diferença de sintaxe entre lista e dicionário?
A compreensão de lista usa colchetes e uma única expressão por item. A de dicionário usa chaves e um par no formato chave: valor, separado por dois-pontos. É esse par que a torna um dicionário; sem os dois-pontos, chaves criam um conjunto, não um dicionário.
Por que usar zip na compreensão de dicionário?
Porque zip casa duas listas item a item, formando os pares que viram chave e valor. Sem ele, você teria que percorrer os índices manualmente. Com zip, a linha fica direta: {chave: valor for chave, valor in zip(lista_chaves, lista_valores)}.
O que acontece se duas chaves forem iguais?
A última vence. Dicionários não permitem chaves repetidas, então, se a compreensão gerar a mesma chave duas vezes, o valor mais recente sobrescreve o anterior silenciosamente. Por isso, ao inverter um dicionário, confira se os valores originais são únicos.
Dá para filtrar olhando só o valor?
Sim. O if no fim pode testar a chave, o valor ou ambos, desde que você tenha percorrido com .items() para ter os dois à mão. Por exemplo, {k: v for k, v in d.items() if v > 0} mantém apenas os pares cujo valor é positivo.
Preciso do enumerate para indexar?
É a forma mais limpa. enumerate percorre uma sequência devolvendo a posição e o item juntos, e o segundo argumento define o número inicial. Assim {item: i for i, item in enumerate(itens)} liga cada item ao seu índice sem contador manual.
A ordem dos pares no dicionário é mantida?
Sim, desde o Python 3.7 os dicionários preservam a ordem de inserção. Como a compreensão percorre a sequência de origem em ordem, os pares aparecem no dicionário final na mesma sequência em que foram gerados. Isso torna a saída previsível.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.