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
keyDict
es engañoso, ya que la primera línea de código devuelve aset
, no adict
.fuente
TypeError: 'type' object is not iterable
:?list
es 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,
defaultdict
es 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.fromkeys
según la respuesta aceptada:fuente