¿Cómo inicializar un dict con claves de una lista y un valor vacío en Python?
Me gustaría obtener de esto:
keys = [1,2,3]
a esto:
{1: None, 2: None, 3: None}
¿Existe una forma pitónica de hacerlo?
Esta es una manera fea de hacerlo:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dict.fromkeys
resuelve directamente el problema:
>>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}
collections.defaultdict
En realidad, este es un método de clase, por lo que también funciona para subclases de dict (como ).
El segundo argumento opcional, que por defecto es None
, especifica el valor que se utilizará para las claves. Tenga en cuenta que se utilizará el mismo objeto para cada clave, lo que puede causar problemas con valores mutables:
>>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}
Si esto es inaceptable, consulte ¿Cómo puedo inicializar un diccionario cuyos valores son listas vacías distintas? para una solución alternativa.
Utilice una comprensión de dictado :
>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}
La expresión de valor se evalúa cada vez, por lo que se puede usar para crear un dictado con listas separadas (digamos) como valores:
>>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}
dict.fromkeys(keys, None)