Me gusta la sintaxis de comprensión de la lista de Python.
¿Se puede usar 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
Me gusta la sintaxis de comprensión de la lista de Python.
¿Se puede usar 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
collections.Counter
es un tipo especializado de dict para contar cosas: Usar un diccionario para contar los elementos de una listaRespuestas:
Desde Python 2.7 y 3 en adelante, solo debe usar la sintaxis de comprensión dict :
En Python 2.6 y versiones anteriores, el
dict
incorporado puede recibir un iterable de pares clave / valor, por lo que puede pasarle una comprensión de lista o una expresión de generador. Por ejemplo:Sin embargo, si ya tiene iterable (s) de claves y / o valores, no necesita usar una comprensión en absoluto; es más simple, simplemente llame
dict
directamente al incorporado:fuente
En Python 3 y Python 2.7+, las comprensiones de diccionario se ven a continuación:
Para Python 2.6 o anterior, vea la respuesta de fortran .
fuente
De hecho, ni siquiera necesita iterar sobre el iterable si ya comprende algún tipo de mapeo, el constructor dict lo hace gentilmente por usted:
fuente
En Python 2.7, dice así:
¡Ciérrelos !
fuente
Estás buscando la frase "comprensión dict", en realidad es:
Suponiendo que
blah blah blah
es un iterable de dos tuplas, estás muy cerca. Creemos algunos "blahs" así:Dict sintaxis de comprensión:
Ahora la sintaxis aquí es la parte de mapeo. Lo que hace que esto sea una
dict
comprensión en lugar de unaset
comprensión (que es lo que se aproxima su pseudocódigo) es el colon,:
como a continuación:Y vemos que funcionó, y debería retener el orden de inserción a partir de Python 3.7:
En Python 2 y hasta 3.6, el orden no estaba garantizado:
Agregar un filtro:
Todas las comprensiones cuentan con un componente de mapeo y un componente de filtrado que puede proporcionar con expresiones arbitrarias.
Para que pueda agregar una parte de filtro al final:
Aquí solo estamos probando si el último carácter es divisible por 2 para filtrar los datos antes de asignar las claves y los valores.
fuente
Versión de Python <2.7 (RIP, 3 de julio de 2010 - 31 de diciembre de 2019) , haga lo siguiente:
Versión de Python> = 2.7, haga lo siguiente:
fuente
Para agregar a la respuesta de @ fortran, si desea iterar sobre una lista de claves
key_list
y una lista de valoresvalue_list
:o
fuente
Aquí hay otro ejemplo de creación de diccionario usando la comprensión dict:
Lo que estoy tratando de 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
Observe el uso de enumerate here para obtener una lista de alfabetos y sus índices en la lista y el intercambio de alfabetos e índices para generar el par de valores clave para el diccionario
Espero que te dé una buena idea de compilación de diccionario y te aliente a usarlo más a menudo para hacer que tu código sea compacto
fuente
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
Prueba esto,
Supongamos que tenemos dos listas país y capital
Luego cree un diccionario a partir de las dos listas:
La salida es así,
fuente
Python admite comprensiones dict, que le permiten expresar la creación de diccionarios en tiempo de ejecución utilizando una sintaxis concisa similar.
Una comprensión del diccionario toma la forma {clave: valor para (clave, valor) en iterable}. Esta sintaxis se introdujo en Python 3 y se retrocedió hasta Python 2.7, por lo que debería poder usarla independientemente de la versión de Python que haya instalado.
Un ejemplo canónico es tomar dos listas y crear un diccionario donde el elemento en cada posición en la primera lista se convierte en una clave y el elemento en la posición correspondiente en la segunda lista se convierte en el valor.
La función zip utilizada dentro de esta comprensión devuelve un iterador de tuplas, donde cada elemento de la tupla se toma de la misma posición en cada uno de los iterables de entrada. En el ejemplo anterior, el iterador devuelto contiene las tuplas ("a", 1), ("b", 2), etc.
Salida:
{'i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, 'f': 125, 'q': 4096, 'u': 8000, 'n': 2197, 'm': 1728, 'r': 4913, 'k': 1000, 'g': 216 , 'v': 9261}
fuente
Este código creará un diccionario usando la comprensión de listas para múltiples listas con diferentes valores que pueden usarse para
pd.DataFrame()
enumerate
pasarán
avals
coincidir cada unokey
con su listafuente
Solo para poner otro ejemplo. Imagina que tienes la siguiente lista:
y desea convertirlo en un dict donde la clave es el índice y el valor es el elemento en la lista. Puede hacerlo con la siguiente línea de código:
fuente
Puede crear un nuevo dict para cada par y combinarlo con el dict anterior:
Obviamente este enfoque requiere
reduce
defunctools
.fuente