2010-10-06 10 views

Respuesta

153

dict((el,0) for el in a) funcionarán bien.

Python 2.7 y superior también son compatibles con la comprensión de dict. Esa sintaxis es {el:0 for el in a}.

+1

expresiones generadoras evitar la sobrecarga de la memoria de poblar toda la lista. –

+14

Probablemente deberías promocionar ese comentario en tu respuesta real. Además, desde Python 2.7 y Python 3 puedes hacer '{el: 0 para el en a}'. (Siéntase libre de agregar eso en su respuesta también.) – Zooba

2
d = dict([(x,0) for x in a]) 

** editar La solución de Tim es mejor porque utiliza generadores, vea el comentario en su respuesta.

6

Además de la respuesta de Tim, que es muy apropiado para su ejemplo específico, vale la pena mencionar collections.defaultdict, lo que le permite hacer cosas como esta:

>>> d = defaultdict(int) 
>>> d[0] += 1 
>>> d 
{0: 1} 
>>> d[4] += 1 
>>> d 
{0: 1, 4: 1} 

Para la cartografía [1, 2, 3, 4] como en el ejemplo, es un pez fuera del agua. Pero dependiendo de la razón por la que hizo la pregunta, esta puede terminar siendo una técnica más apropiada.

86
d = dict.fromkeys(a, 0) 

a es la lista, 0 es el valor predeterminado. Preste atención para no establecer el valor predeterminado en algún objeto mutable (es decir, list o dict), ya que será un objeto utilizado como valor para cada tecla en el diccionario (marque here para obtener una solución para este caso). Los números/cadenas son seguros.

+11

la única manera pitónica. – SilentGhost

+1

Esto parece ser más limpio (al menos para mí), ¿cómo se compara con Tim? – blahster

+1

La solución de Tim funciona para cualquier valor predeterminado (puede inicializar el diccionario con una lista vacía o un objeto datetime o cualquier otra cosa). En mi solución, puedes inicializarlo solo con objetos inmutables (int/float, string, ...). Es más pitónico para su caso (el valor predeterminado es 0) y muy probablemente también sea más rápido. – eumiro

7

En la versión pitón> = 2,7 y en Python 3:

d = {el:0 for el in a} 
Cuestiones relacionadas