HOWTO · Python
Inicializar un diccionario de Python
Este tutorial demuestra cómo inicializar un diccionario en Python
En esta página
Un diccionario de Python almacena pares clave-valor, de modo que un programa puede buscar un valor mediante su clave. Elija el patrón de inicialización que corresponda a sus datos: escriba un literal para los pares conocidos, use dict() para los pares proporcionados o los argumentos con nombre, use dict.fromkeys() si varias claves deben compartir un valor, o derive las entradas con una comprensión. Los ejemplos siguientes muestran cómo se comporta cada forma.
Inicializar un diccionario con sintaxis literal
Use un literal de diccionario cuando las claves y los valores ya estén definidos en el código. Coloque cada clave y su valor entre llaves, separados por dos puntos, y separe los pares con comas. El diccionario resultante tiene claves únicas; si un literal repite una clave, se conserva el último valor asignado a ella.
Ejecute este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
dict1 = {"X": 2, "Y": 3, "Z": 4}
print(dict1)
Esto crea tres claves de texto asociadas a valores enteros. Para una asignación pequeña y fija, un literal suele ser la opción más clara.
Inicializar un diccionario con el constructor dict()
El constructor dict() acepta argumentos con nombre o un iterable de pares clave-valor. Los nombres de los argumentos se convierten en claves de texto, así que use pares cuando las claves no sean identificadores válidos o no sean cadenas. Por ejemplo, dict(X=1, Y=2) crea la misma asignación que {"X": 1, "Y": 2}. Para convertir pares existentes, páselos como un iterable, por ejemplo, dict([("X", 1), ("Y", 2)]).
El constructor resulta útil cuando los datos ya vienen en forma de pares. Si una secuencia de pares repite una clave, se conserva el valor del último par que la incluye.
Usar dict.fromkeys() para asignar un valor predeterminado compartido a varias claves
dict.fromkeys() crea un diccionario nuevo a partir de un iterable de claves y asigna a cada una el mismo valor indicado. Si omite el valor, se usa None, como en dict.fromkeys(["X", "Y", "Z"]).
Esta opción es práctica para valores predeterminados inmutables, como None, 0 o una cadena. Tenga cuidado con un valor mutable, como una lista: todas las claves hacen referencia al mismo objeto de lista, por lo que cualquier cambio hecho a través de una clave también se verá a través de las demás. Si cada clave necesita su propio valor mutable independiente, use una comprensión, por ejemplo, {key: [] for key in keys}.
Crear un diccionario a partir de pares o iterables paralelos
Si los registros ya contienen pares clave-valor, pase el iterable directamente a dict(). Puede usar una lista de tuplas u otro iterable cuyos elementos contengan dos valores cada uno: dict([("X", 5), ("Y", 6), ("Z", 8)]).
Si las claves y los valores están almacenados por separado, combínelos con zip() y pase los pares resultantes a dict(). Por ejemplo, dict(zip(["X", "Y", "Z"], [5, 6, 8])) asigna a cada clave el valor que ocupa la misma posición. zip() se detiene en cuanto se agota cualquiera de los iterables, por lo que no se incluyen los elementos sobrantes del iterable más largo. Si algún par resultante repite una clave, prevalece el último valor.
Crear un diccionario con una comprensión
Una comprensión de diccionario deriva entradas de un iterable mediante una sola expresión. Su forma general es {key_expression: value_expression for item in iterable}. Por ejemplo, {name: 0 for name in ["Ada", "Lin"]} asigna a cada nombre un valor inicial de cero.
Use una comprensión cuando las claves o los valores se calculen a partir de los datos, o cuando cada clave necesite su propio valor mutable recién creado. Equivale a empezar con un diccionario vacío y asignar un valor por cada elemento de un bucle. Mantenga la expresión sencilla; si la transformación requiere varios pasos, un bucle normal será más fácil de leer.
Añadir un valor predeterminado para una clave ausente con setdefault()
setdefault() opera sobre un diccionario existente. Si la clave está presente, devuelve su valor actual; de lo contrario, inserta la clave con el valor predeterminado indicado y lo devuelve. Por ejemplo, counts.setdefault("apples", 0) inicializa un contador ausente sin modificar un recuento existente.
Este método resulta útil cuando ya tiene un diccionario y necesita inicializar una clave concreta. No sirve para construir una asignación completa. Para agrupar valores repetidamente, considere con cuidado setdefault(key, []): la lista nueva se crea para esa llamada y las llamadas posteriores con una clave existente devuelven la lista actual. Las llamadas directas a __setitem__() son una alternativa de bajo nivel; para asignar una entrada, es más claro usar una asignación normal, como mapping[key] = value.
Elegir el patrón de inicialización adecuado
Use un literal para una asignación pequeña cuyos pares se conocen de antemano. Elija dict() para argumentos con nombre o datos que ya estén en forma de pares; combine iterables paralelos con zip() cuando sus posiciones correspondan. Use dict.fromkeys() cuando todas las claves deban compartir un mismo valor predeterminado, sobre todo si es inmutable. Elija una comprensión para calcular entradas o crear valores independientes para cada clave. Use setdefault() para añadir un valor predeterminado a una clave de un diccionario que ya existe.