dictionary Crear un diccionario con la lista de comprensión en Python




5 Answers

En Python 3 y Python 2.7+, las comprensiones del diccionario se parecen a las siguientes:

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

Para Python 2.6 o anterior, vea la respuesta de fortran .

python dictionary list-comprehension language-features dict-comprehension

Me gusta la sintaxis de comprensión de lista de Python.

¿Se puede usar para crear diccionarios también? Por ejemplo, al iterar sobre pares de claves y valores:

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



En Python 2.7, va como:

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

Zip ellos !




Crear un diccionario con la lista de comprensión en Python

Me gusta la sintaxis de comprensión de lista de Python.

¿Se puede usar para crear diccionarios también? Por ejemplo, al iterar sobre pares de claves y valores:

mydict = {(k,v) for (k,v) in blah blah blah}

Asumiendo que blah blah blah es una iterable de dos tuplas, estás muy cerca. Vamos a crear algunos "blahs" así:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

Sintaxis de la comprensión del dictado:

Ahora la sintaxis aquí es la parte de mapeo. Lo que hace que esto sea una comprensión de dict lugar de una comprensión de set (que es lo que se aproxima a su pseudocódigo) es el colon, como abajo:

mydict = {k: v for k, v in blahs}

Y ahora cuando lo hagas:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

Añadiendo un filtro:

Al igual que las comprensiones de listas, puede agregar una parte de filtro al final:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

Aquí probamos si el último carácter es divisible por 2.




Aquí hay otro ejemplo de creación de diccionario usando la comprensión de dict:

Lo que debo hacer aquí es crear un diccionario alfabético donde cada par; es la letra inglesa y su posición correspondiente en el alfabeto inglés

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

Observe el uso de enumerar aquí para obtener una lista de alfabetos y sus índices en la lista e intercambiar los alfabetos e índices para generar el par de valores clave para el diccionario

Espero que te dé una buena idea de compilación de diccionarios y te aliente a usarlo más a menudo para que tu código sea compacto.




Solo para tirar en otro ejemplo. Imagina que tienes la siguiente lista:

nums = [4,2,2,1,3]

y desea convertirlo en un dict donde la clave es el índice y el valor es el elemento en la lista. Puedes hacerlo con la siguiente línea de código:

{index:nums[index] for index in range(0,len(nums))}



Related