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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Compreensão de dicionário.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Chaves e o par chave: valor. A compreensão de dicionário usa chaves { } e um par no formato chave: valor.
Casos úteis do dia a dia. A compreensão de dicionário resolve tarefas que apareciam o tempo todo com laços longos.
Filtrar pares com um if. Percorra sempre com .items() quando precisar da chave e do valor juntos.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.
| Tipo | Delimitador | Corpo 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.