561 votos

Python: crear un diccionario con la comprensión de la lista

Me gusta la sintaxis de python lista comprensión.

¿Puede utilizarse para crear diccionarios también? Por ejemplo, iterando sobre pares de claves y valores:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work :(

933voto

fortran Puntos 26495

En Python 2.6 y versiones anteriores, el dict constructor puede recibir un iterable de pares clave/valor:

d = dict((key, value) for (key, value) in iterable)

Desde Python 2.7 y 3 en adelante, sólo se puede utilizar el diccionario de la comprensión de la sintaxis directamente:

d = {key: value for (key, value) in iterable}

Por supuesto, usted puede utilizar el iterable en cualquier manera que usted desea (tuplas y listas literales, generador de comprensión, lista de comprensión, generador de funciones, composición funcional... se sientan creativos) como siempre que cada elemento es un iterable a sí mismo de dos elementos:

d = {value: foo(value) for value in sequence if bar(value)}

def key_value_gen(k):
   yield chr(k+65)
   yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))

107voto

SilentGhost Puntos 79627

en py3k dict comprensiones funcionan así:

d = {k:v for k, v in iterable}

en py2k se puede utilizar la sugerencia de fortran.

9voto

Learner Puntos 484

Utilice comprensiones dict python: aquí está el enlace para saber más sobre él: Comprensiones Dict

7voto

doukremt Puntos 1902

De hecho, incluso no necesitas iterar sobre el iterable si ya comprende una especie de mapeo, el constructor dict haciendo gentilmente por ti:

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X