2010-02-11 9 views

Respuesta

236

dict.fromkeys([1, 2, 3, 4])

Esto es en realidad un classmethod, por lo que funciona para dict-subclases (como collections.defaultdict) también. El segundo argumento opcional especifica el valor a utilizar para las teclas (por defecto None.)

+77

que tener cuidado con la inicialización a algo mutable: Si llama, por ejemplo, 'dict.fromkeys ([1, 2, 3], [])', todas las claves se asignan a la misma lista, y modificar una las modificará todas. – charleslparker

44
dict.fromkeys(keys, None) 
+0

impresionante, quería listas vacías, '' dict.fromkeys (claves, []) '' – muon

+4

@muon Eso es casi seguro que no es lo que quieres, ver [charleslparker comment] (http://stackoverflow.com/questions/2241891/how-to-initialize-a-dict-with-keys-from-a-list-and-empty-value-in-python # comment25131847_2241904). – gerrit

+0

@gerrit ¿cuál es el camino correcto entonces, ¿sabes? – muon

6
d = {} 
for i in keys: 
    d[i] = None 
+1

¿Por qué Python arroja un error como: 'TypeError: 'tipo' objeto no es iterable'? – FaCoffee

+1

@FrancescoCastellani Porque 'list' es un tipo. A menos que tenga algo como 'list = []', el método anterior siempre le dará el mismo error – smac89

139

nadie se preocupaba para dar una solución dict-comprensión?

>>> 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} 
+1

Esto solo funciona en Python 3.x –

+25

Creo que fue backported a 2.7 – wim

+8

Esto es agradable y no sufre de la problema de referencia que hace la respuesta aceptada. – charleslparker

7
>>> keyDict = {"a","b","c","d"} 

>>> dict([(key, []) for key in keyDict]) 

Salida:

{'a': [], 'c': [], 'b': [], 'd': []} 
+1

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a _how_ y/o _por qué_ resuelve el problema mejoraría el valor de la respuesta a largo plazo. –

+0

el nombre 'keyDict' es engañoso, ya que la primera línea de código devuelve un' set', no un 'dict'. –

Cuestiones relacionadas