with initialize functions example dict comprehension python dictionary list-comprehension language-features dict-comprehension

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



initialize a dictionary python (10)

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


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.


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


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 !


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 .


Para agregar a la respuesta de @ fortran, si desea iterar sobre una lista de claves key_list así como una lista de valores value_list :

d = dict((key, value) for (key, value) in zip(key_list, value_list))

o

d = {(key, value) for (key, value) in zip(key_list, value_list)}


Prueba esto,

def get_dic_from_two_lists(keys, values): return { keys[i] : values[i] for i in range(len(keys)) }

Supongamos que tenemos dos listas país y capital.

country = [''India'', ''Pakistan'', ''China''] capital = [''New Delhi'', ''Islamabad'', ''Beijing'']

Luego crea el diccionario de las dos listas:

print get_dic_from_two_lists(country, capital)

La salida es así,

{''Pakistan'': ''Islamabad'', ''China'': ''Beijing'', ''India'': ''New Delhi''}


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


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