6.1 Uso de enumerate()
A gente já viu como trabalhar com loops por keys
, values
e items
em dicionários. Agora, vamos dar uma olhada mais detalhada na função enumerate()
.
A função enumerate()
é útil para iterar sobre elementos de um dicionário, permitindo acesso tanto a índices quanto a chaves e valores.
Aqui estão alguns exemplos de como usar enumerate()
com dicionários:
Iteração sobre chaves e valores de dicionário com índices
Você pode usar enumerate()
para iterar sobre chaves e valores de um dicionário, enquanto obtém os índices.
# Dicionário com dados de uma pessoa
person = {"name": "Alice", "age": 25, "city": "New York"}
# Iterar sobre chaves e valores do dicionário com índices
for index, (key, value) in enumerate(person.items()):
print(f"Índice: {index}, Chave: {key}, Valor: {value}")
# Exibe o índice, chave e valor de cada elemento do dicionário
Saída:
Índice: 0, Chave: name, Valor: Alice
Índice: 1, Chave: age, Valor: 25
Índice: 2, Chave: city, Valor: New York
Transformação de valores de dicionário usando índices
Você pode usar enumerate()
para alterar os valores de um dicionário com base em seus índices.
# Dicionário original
person = {"name": "Alice", "age": 25, "city": "New York"}
# Novo dicionário com índices nos valores
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Atribui ao valor no dicionário o índice como string
print(indexed_person)
# Exibe o dicionário com índices adicionados aos valores
Saída:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Usando enumerate()
para criar um novo dicionário
Você pode usar enumerate()
para criar um novo dicionário, onde os índices serão as chaves.
# Dicionário original
person = {"name": "Alice", "age": 25, "city": "New York"}
# Novo dicionário onde os índices são usados como chaves
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Exibe o novo dicionário com índices como chaves
Saída:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Compreensões de Dicionários
Já usamos List Comprehensions para gerar listas e Set Comprehensions para gerar conjuntos. Da mesma forma, podemos usar a sintaxe de compreensões para criar dicionários. Dictionary Comprehensions (compreensões de dicionários) permitem escrever código mais conciso e legível para criar dicionários.
A sintaxe básica de dictionary comprehension é assim:
{expressão1: expressão2 for variável in sequência if condição}
onde
-
variável
— variável que assume o valor de cada elemento do objeto iterável. -
sequência
— objeto iterável (por exemplo, lista, tupla, string) que a variável percorre. -
expressão1
— expressão para gerar as chaves do dicionário. Geralmente depende da variável. -
expressão2
— expressão para gerar os valores do dicionário. -
condição
— (opcional) condição que deve ser satisfeita para incluir o elemento no dicionário.
Exemplo 1:
Criando um dicionário com os quadrados dos números
# Criando um dicionário onde as chaves são números de 1 a 5 e os valores são seus quadrados
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Saída: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Exemplo 2:
Criando um dicionário a partir de uma lista de tuplas
# Lista de tuplas contendo pares chave-valor
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Gerando um dicionário a partir da lista de tuplas
person = {key: value for key, value in pairs}
print(person) # Saída: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Exemplo 3:
Filtrando elementos ao criar um dicionário
# Criando um dicionário onde as chaves são números de 1 a 10 e os valores são seus quadrados
# Apenas para números pares
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Saída: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Exemplo 4:
Transformando elementos ao criar um dicionário
# Lista de strings
words = ["apple", "banana", "cherry"]
# Gerando um dicionário onde as chaves são strings e os valores são seus comprimentos
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Saída: {'apple': 5, 'banana': 6, 'cherry': 6}
Compreensões de dicionários aninhados
# Lista de listas com pares chave-valor
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Gerando um dicionário a partir de lista aninhada
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Saída: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Maneiras combinadas
Você pode combinar diferentes maneiras de criar dicionários para casos mais complexos.
# Unindo múltiplos dicionários em um só
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Saída: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
O uso do operador **
antes do nome do dicionário permite descompactar seus elementos, como se estivessem listados individualmente. Assim, a expressão {**dict1, **dict2}
efetivamente combina os elementos de ambos os dicionários.
GO TO FULL VERSION