programandoai

Dict comprehensions e zip: combinando coleções

Construir um dicionário a partir de uma lista, ou combinar duas listas paralelas em pares, também tem seu jeito compacto e pythônico.

Estudar esta lição interativa →

A mesma ideia da list comprehension se aplica a dicionários: uma dict comprehension constrói um dicionário inteiro numa linha, no formato {chave: valor for item in lista}.

numeros = [1, 2, 3, 4]

quadrados = {numero: numero ** 2 for numero in numeros}
print(quadrados)

Cada número da lista vira uma chave, e seu quadrado vira o valor correspondente.

Outro problema comum: você tem duas listas paralelas (mesma posição, dados relacionados), como uma lista de nomes e uma lista de notas na mesma ordem, e precisa combiná-las em pares. É exatamente para isso que existe zip(lista1, lista2): ele entrega pares (item_de_lista1, item_de_lista2), um de cada lista, na mesma posição.

nomes = ["Ana", "Bruno", "Carla"]
notas = [8.5, 6.0, 9.2]

for nome, nota in zip(nomes, notas):
    print(f"{nome}: {nota}")

zip combina as duas listas posição a posição.

Pense em zip como o fecho de um zíper de verdade, unindo duas fileiras de dentes, um de cada lado, par a par. Se um dos lados do zíper for mais curto que o outro, o fecho simplesmente para onde o lado mais curto acaba, sobrando dentes soltos do outro lado.

zip combina lindamente com dict comprehension

{nome: nota for nome, nota in zip(nomes, notas)} transforma duas listas paralelas direto num dicionário nome-para-nota, numa linha só, combinando os dois recursos desta lição.

zip trunca silenciosamente na lista mais curta

Se nomes tem 4 itens e notas tem só 3, zip(nomes, notas) devolve apenas 3 pares, descartando o quarto nome sem avisar nada, sem erro. Esse é um bug silencioso clássico ao combinar dados de fontes diferentes que deveriam estar sincronizadas, mas não estão: sempre vale conferir se len(nomes) == len(notas) antes de confiar no resultado de um zip.

produtos = ["Caneta", "Caderno", "Borracha"]
precos = [3.5, 18.9, 2.0]

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

Combine zip com uma dict comprehension.

Complete a função maiores_que(lista, limite) usando uma list comprehension: ela deve devolver, na mesma ordem, só os números de lista que são estritamente maiores que limite.
def maiores_que(lista, limite):
    # devolva, numa list comprehension, os itens de lista maiores que limite
    pass

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso