HOWTO · Python
Agregar pares de valores-clave a un diccionario dentro de un bucle en Python
Aprenda a agregar pares clave-valor a un diccionario dentro de un bucle en Python.
En esta página
La asignación a un diccionario agrega o actualiza una entrada: coloca dictionary[key] = value dentro de un bucle. Si las claves y los valores están en iterables separados, empareja sus elementos con zip() en un bucle for. Usa un bucle while cuando necesites el índice.
Agregar pares clave-valor a un diccionario dentro de un bucle
Parte de un diccionario y asigna cada clave a su valor correspondiente a medida que el bucle recorre cada par. Los valores pueden ser distintos tipos de objetos de Python; las claves deben ser hashables. El siguiente ejemplo empareja nombres con puntuaciones:
Emparejar claves y valores con zip()
zip(keys, values) produce un par de cada iterable en cada iteración. Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
for key, value in zip(keys, values):
scores[key] = value
print(scores)
{'Ada': 98, 'Linus': 91, 'Grace': 100}
La asignación guarda cada puntuación bajo el nombre correspondiente. Este patrón también sirve si los valores son listas, funciones u otros objetos; solo las claves del diccionario deben ser hashables.
Usar un bucle while cuando necesites índices
Un bucle basado en índices resulta útil cuando otra operación necesita la posición. Establece un límite y aumenta el índice en cada iteración:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
index = 0
limit = min(len(keys), len(values))
while index < limit:
scores[keys[index]] = values[index]
index += 1
Aquí, limit garantiza que el bucle solo acceda a posiciones presentes en ambas listas. Para emparejar elementos de forma habitual, for key, value in zip(keys, values) es más breve y evita que tengas que administrar el índice.
Gestionar entradas de distinta longitud y claves existentes
De forma predeterminada, zip() se detiene cuando se agota el iterable más corto. Los elementos sin pareja del iterable más largo quedan fuera. Si cada clave debe tener un valor, compara las longitudes de las entradas antes del bucle y decide cómo debe gestionar tu programa las diferencias.
Asignar un valor a una clave que ya está en el diccionario reemplaza su valor anterior; no crea una segunda entrada con la misma clave. Si necesitas conservar ambos valores, guarda una colección como valor y añade elementos a ella. Las claves deben ser hashables: puedes usar cadenas, números y tuplas cuyos elementos sean hashables, pero no listas ni diccionarios mutables.
Imprimir el resultado y entender la complejidad
Usa print(scores) para inspeccionar un diccionario pequeño o recorre scores.items() para dar formato a cada clave y valor. La representación simple de un diccionario es determinista para los valores del ejemplo. Los objetos personalizados pueden mostrar una representación que incluya una dirección de memoria; si necesitas una salida legible y repetible, imprime atributos concretos.
Para m pares, el bucle realiza m asignaciones y tarda O(m) en promedio, ya que cada asignación al diccionario tiene un costo promedio de O(1). Este análisis describe el caso promedio; las colisiones pueden hacer que algunas asignaciones individuales tarden más. El diccionario resultante contiene como máximo m claves distintas, por lo que requiere O(m) de espacio adicional. El iterador zip() usa espacio auxiliar constante. Si el diccionario ya contiene d entradas, las conserva salvo que una clave emparejada reemplace su valor; su tamaño final es como máximo d + m.