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).
Ao contrário das listas, os dicionários exigem tanto uma chave quanto um valor, separados por dois pontos (:) e utilizam {} em vez de [].
12345678910111213141516travel_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.
123456789101112travel_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
cityecountry), 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)
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
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo