Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Compreensões de Dicionário | Compreensões de Listas e Dicionários
Tutorial de Laços em Python
Seção 4. Capítulo 3
single

single

Compreensões de Dicionário

Deslize para mostrar o menu

Compreensões de dicionário oferecem uma maneira concisa de criar dicionários em Python, semelhante às compreensões de listas. Elas permitem transformar dados em pares chave-valor em uma única linha de código.

No essencial, uma compreensão de dicionário básica permite construir um novo dicionário aplicando uma expressão a cada par chave-valor em uma variável iterável.

{key_expression: value_expression for item in iterable}
  • key_expression: define a chave para cada par chave-valor;
  • value_expression: define o valor correspondente à chave;
  • iterable: a fonte dos itens a serem processados (por exemplo, uma lista, range ou outro iterável).
Note
Nota

Ao contrário das listas, os dicionários exigem tanto uma chave quanto um valor, separados por dois pontos (:) e utilizam {} em vez de [].

12345678910111213141516
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Initialize an empty dictionary travel_budget = {} # Populate the dictionary using a for loop for destination, cost in travel_wishlist: travel_budget[destination] = cost print(travel_budget)

Este código percorre a lista travel_wishlist, onde cada sublista contém um destino e seu orçamento. O laço for atribui o destino como chave e o orçamento como valor no dicionário travel_budget.

123456789101112
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Create the dictionary using dictionary comprehension travel_budget = {destination: cost for destination, cost in travel_wishlist} print(travel_budget)

Este exemplo utiliza compreensão de dicionário para alcançar o mesmo resultado do exemplo anterior. Cada destino se torna uma chave, e seu respectivo custo se torna o valor no dicionário travel_budget, tudo em uma única linha.

Lidando com ValueError ao Desempacotar Itens com Mais de Dois Elementos

Ao utilizar compreensões de dicionário, é comum desempacotar itens de um iterável em variáveis para chaves e valores. Se cada item do seu iterável contém mais de dois elementos (como uma lista de [city, country, budget]), tentar desempacotar em apenas duas variáveis resultará em um ValueError.

Por exemplo, se você escrever:

{city: country for city, country in travel_wishlist}

e travel_wishlist contém sublistas com três elementos, o Python exibirá este erro:

ValueError: too many values to unpack (expected 2)

Por que isso acontece?

  • O Python espera desempacotar exatamente dois valores (para city e country), mas cada sublista possui três.
  • Essa diferença faz com que o Python lance um ValueError, informando claramente que mais valores foram fornecidos do que o esperado.

Como lidar com isso?

  • Desempacote todos os elementos, mas utilize apenas o necessário:

for city, country, budget in travel_wishlist — atribua cada valor a uma variável.

  • Ignore valores não utilizados com um sublinhado:

for city, country, _ in travel_wishlist — o sublinhado _ é uma convenção comum para variáveis não utilizadas.

  • Use slicing para selecionar elementos:

for city, country in [item[:2] for item in travel_wishlist] — fatie cada sublista para os dois primeiros elementos antes de desempacotar.

Ao igualar o número de variáveis ao número de elementos em cada item, ou ao ignorar dados não utilizados, você evita erros de desempacotamento e mantém suas compreensões de dicionário limpas e legíveis.

1234567891011121314151617181920
# Example data: each tuple has three elements (city, country, budget) travel_wishlist = [ ("Paris", "France", 2000), ("Tokyo", "Japan", 3000), ("New York", "USA", 2500) ] # Attempting to unpack only two variables (incorrect) try: city_to_country = {city: country for city, country in travel_wishlist} except ValueError as e: print("Error:", e) # Correct: unpack all elements, using underscore for unused value city_to_country = {city: country for city, country, _ in travel_wishlist} print("Handled with underscore:", city_to_country) # Correct: use slicing to select only needed elements city_to_country = {item[0]: item[1] for item in travel_wishlist} print("Handled with slicing:", city_to_country)
Tarefa

Deslize para começar a programar

Um viajante deseja organizar sua travel_wishlist mapeando cada nome de cidade para seu respectivo país. Para realizar isso de forma eficiente, é necessário transformar os dados em um dicionário.

  • Extraia os nomes das cidades e seus respectivos países de travel_wishlist.
  • Armazene o dicionário resultante em city_to_country.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt