Creando un diccionario con los mismos valores

Supongamos que tengo el diccionario a = {} y quiero que tenga un resultado como este

 value = 12 a = {'a':value,'b':value,'f':value,'h':value,'p':value} 

y así sucesivamente para muchas keys:same value . Ahora claro que puedo hacerlo así

 a.update({'a':value}) a.update({'b':value}) 

y así sucesivamente … pero como el valor es el mismo para todas las teclas, ¿no tenemos un enfoque más python para hacer esto?

Podrías usar dictados de dictado (python 2.7+):

 >>> v = 12 >>> d = {k:v for k in 'abfhp'} >>> print d {'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12} 

¿Qué tal crear un diccionario nuevo con las claves que desea y un valor predeterminado? Compruebe el método fromkeys .

 >>> value=12 >>> a=dict.fromkeys(['a', 'b', 'f', 'h', 'p'], value) >>> print a {'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12} 
 >>> a=dict(zip('abfhp',[12]*len('abfhp'))) >>> a {'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12} 
 a = dict() for key in keys: a[key] = value 

Como señaló stummjr, la comprensión del diccionario es útil para entender y usar, especialmente porque todo en Python es un dicitonario.

Otra forma en la que podrías considerar resolver este problema es mediante la función lambda.

 makeDict = lambda keys, values: { k:v for k, v in zip(keys, values) } makeDict( [1,2,3], list('abc') ) ['a': 1, 'c': 3, 'b': 2] 

Aquí está lo que MakeDict parece reescrito como una función regular si esto agrega alguna claridad.

 def makeDict(keys, values): return { k:v for k, v in zip(keys, values) } 

De todos modos, las lambdas pueden ser algo divertido para jugar, y este no es el ejemplo más sólido. Existe la posibilidad de pérdida de datos utilizando zip. Ambas secuencias deben tener la misma longitud para que funcione correctamente. Python recorrerá hasta que tenga pares para hacer coincidir ambas secuencias. En el siguiente ejemplo, el elemento adicional en los valores no debería aparecer en el diccionario.

 { k:v for k, v in zip( list('abc'), [1,2,3,4]) } ['a': 1, 'c': 3, 'b': 2]