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





comprehension example (9)


En Python 2.6 y anteriores, el constructor dict 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, puedes usar la sintaxis de comprensión de dict directamente:

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

Por supuesto, puede usar el iterable de la forma que desee (tuplas y listas de literales, comprensión de generadores, comprensión de listas, funciones de generador, composición funcional ... sentirse creativo) siempre que cada elemento sea un iterable 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)))

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



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.




Para la versión de python <2.7, haga lo siguiente:

d = dict((i,True) for i in [1,2,3])

Para la versión de python> = 2.7, haga lo siguiente:

d = {i: True for i in [1,2,3]}



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.




De hecho, ni siquiera necesita iterar sobre lo iterable si ya comprende algún tipo de mapeo, el constructor del dict lo hace con gracia para usted:

>>> 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}



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 !




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))}



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 .




Diccionario dado

e = {1:39, 4:34, 7:110, 2:87}

Clasificación

sred = sorted(e.items(), key=lambda value: value[1])

Resultado

[(4, 34), (1, 39), (2, 87), (7, 110)]

Puede usar una función lambda para ordenar las cosas por valor y almacenarlas procesadas dentro de una variable, en este caso sred con el diccionario original.

¡Espero que ayude!







python dictionary list-comprehension language-features dict-comprehension