CodeGym /Cursos /Python SELF ES /Bucles y generadores de diccionarios

Bucles y generadores de diccionarios

Python SELF ES
Nivel 11, Lección 6
Disponible

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.

2
Tarea
Python SELF ES, nivel 11, lección 6
Bloqueada
Indexación de estudiantes.
Indexación de estudiantes.
2
Tarea
Python SELF ES, nivel 11, lección 6
Bloqueada
Diccionario a partir de una lista de tuplas.
Diccionario a partir de una lista de tuplas.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION