6.1 Uso de enumerate()
Ya hemos visto cómo trabajar con bucles en keys, values e items en diccionarios. Ahora vamos a profundizar en la función enumerate().
La función enumerate() es útil para iterar sobre elementos del diccionario, proporcionando acceso tanto a los índices como a las claves y valores.
Aquí tienes algunos ejemplos de cómo usar enumerate() con diccionarios:
Iteración sobre claves y valores de un diccionario con índices
Puedes usar enumerate() para iterar sobre las claves y valores de un diccionario mientras obtienes los índices.
# Diccionario con datos sobre una persona
person = {"name": "Alice", "age": 25, "city": "New York"}
# Iteración sobre claves y valores del diccionario con índices
for index, (key, value) in enumerate(person.items()):
print(f"Índice: {index}, Clave: {key}, Valor: {value}")
# Imprime el índice, clave y valor de cada elemento del diccionario
Salida:
Índice: 0, Clave: name, Valor: Alice
Índice: 1, Clave: age, Valor: 25
Índice: 2, Clave: city, Valor: New York
Transformación de valores del diccionario usando índices
Puedes usar enumerate() para modificar los valores de un diccionario dependiendo de su índice.
# Diccionario original
person = {"name": "Alice", "age": 25, "city": "New York"}
# Nuevo diccionario con índices en los valores
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Asigna al valor en el diccionario el índice como cadena
print(indexed_person)
# Imprime el diccionario con índices añadidos a los valores
Salida:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Uso de enumerate() para crear un nuevo diccionario
Puedes usar enumerate() para crear un nuevo diccionario donde los índices serán las claves.
# Diccionario original
person = {"name": "Alice", "age": 25, "city": "New York"}
# Nuevo diccionario donde los índices se usan como claves
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Imprime el nuevo diccionario con índices como claves
Salida:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Generadores de diccionarios
Ya hemos usado List Comprehensions para generar listas y Set Comprehensions para generar conjuntos. De forma similar, puedes usar la sintaxis de generadores para crear diccionarios. Los Dictionary Comprehensions (generadores de diccionarios) te permiten escribir código más conciso y legible para crear diccionarios.
La sintaxis básica de un dictionary comprehension es la siguiente:
{expresión1: expresión2 for variable in secuencia if condición}
donde
-
variable— variable que toma el valor de cada elemento del objeto iterable. -
secuencia— objeto iterable (por ejemplo, lista, tupla, cadena) que se recorre con la variable dada. -
expresión1— expresión para generar las claves del diccionario. Usualmente depende de la variable. -
expresión2— expresión para generar los valores del diccionario. -
condición— (opcional) condición que debe cumplirse para incluir un elemento en el diccionario.
Ejemplo 1:
Creación de un diccionario con los cuadrados de los números
# Creación de un diccionario donde las claves son números del 1 al 5 y los valores son sus cuadrados
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Salida: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Ejemplo 2:
Creación de un diccionario a partir de una lista de tuplas
# Lista de tuplas con pares clave-valor
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Generación de un diccionario a partir de una lista de tuplas
person = {key: value for key, value in pairs}
print(person) # Salida: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Ejemplo 3:
Filtrado de elementos al crear un diccionario
# Creación de un diccionario donde las claves son números del 1 al 10 y los valores son sus cuadrados
# Solo para números pares
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Salida: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Ejemplo 4:
Transformación de elementos al crear un diccionario
# Lista de cadenas
words = ["apple", "banana", "cherry"]
# Generación de un diccionario donde las claves son cadenas y los valores son sus longitudes
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Salida: {'apple': 5, 'banana': 6, 'cherry': 6}
Dictionary comprehensions anidados
# Lista de listas con pares clave-valor
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Generación de un diccionario a partir de una lista anidada
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Salida: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Formas combinadas
Puedes combinar diferentes formas de crear diccionarios para casos más complejos.
# Combinación de varios diccionarios en uno
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Salida: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
Usar el operador ** antes del nombre del diccionario permite desempaquetar sus elementos como si estuvieran listados en fila. Así, la expresión {**dict1, **dict2} efectivamente combina los elementos de ambos diccionarios.
GO TO FULL VERSION