2009-02-23 8 views
7

¿Existe una manera más concisa de hacer esto en Python ?:¿Cuál es la manera Pythonic de combinar dos secuencias en un diccionario?

def toDict(keys, values): 
    d = dict() 
    for k,v in zip(keys, values): 
    d[k] = v 

    return d 
+0

Junto con las respuestas correctas que has tenido hasta ahora para la técnica, señalaré que 'to_dict' es más Pythonic que 'toDict' al nombrar una función. Consulte [PEP 8] (http://www.python.org/dev/peps/pep-0008 "PEP 8") para conocer las recomendaciones de estilo para escribir el código de Python. – bignose

+0

+1 por ayudar a alguien que está claramente interesado 'el camino'. – physicsmichael

+0

Gracias por el aviso. Sin embargo, esto preferiría pertenecer a una pregunta wikified en la línea de "pautas de estilo de codificación de Python". – guillermooo

Respuesta

42

Sí:

dict(zip(keys,values)) 
+0

¡Es bastante compacto! ¡Gracias! – guillermooo

4

Si keys 'tamaño puede ser más grande que values' uno podría usarse itertools.izip_longest (Python 2.6) que permite especificar un valor predeterminado para el resto de las teclas:

from itertools import izip_longest 

def to_dict(keys, values, default=None): 
    return dict(izip_longest(keys, values, fillvalue=default)) 

Ejemplo:

>>> to_dict("abcdef", range(3), 10) 
{'a': 0, 'c': 2, 'b': 1, 'e': 10, 'd': 10, 'f': 10} 

NOTA: itertools.izip*() funciones a diferencia de los iteradores no retorno zip() función de listas.

Cuestiones relacionadas