Me gustaría obtener de esto:
keys = [1,2,3]
a esto:
{1: None, 2: None, 3: None}
¿Hay una manera pitónica de hacerlo?
Esta es una forma fea de hacerlo:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dictionary
python
Juanjo Conti
fuente
fuente

dict.fromkeys([1, 2, 3], [])todas las teclas se asignan a la misma lista, y si modifica una, las modificará todas.{k:[] for k in [1, 2, 3]}embargo, inicializar con todavía es seguro.a nadie le importaba dar una solución de comprensión de dict?
fuente
False).fuente
dict.fromkeys(keys, [])Salida:
fuente
keyDictes engañoso, ya que la primera línea de código devuelve aset, no adict.fuente
TypeError: 'type' object is not iterable:?listes un tipo. A menos que tenga algo asílist = [], el método anterior siempre le dará el mismo errorEn muchos flujos de trabajo en los que desea adjuntar un valor predeterminado / inicial para claves arbitrarias, no necesita hacer un hash de cada clave individualmente antes de tiempo. Puedes usar
collections.defaultdict. Por ejemplo:Esto es más eficiente, ahorra tener que hacer hash todas sus claves en la instanciación. Además,
defaultdictes una subclase dedict, por lo que generalmente no es necesario volver a convertir a un diccionario normal.Para los flujos de trabajo en los que necesita controles sobre las teclas permitidas, puede usar
dict.fromkeyssegún la respuesta aceptada:fuente