| You are here: Inicio > Inmersión en Python > Tipos de dato nativos > Inyección de listas (mapping) | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
Una de las características más potentes de Python es la lista por comprensión (list comprehension), que proporciona una forma compacta de inyectar una lista en otra aplicando una función a cada uno de sus elementos.
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li][2, 18, 16, 8] >>> li
[1, 9, 8, 4] >>> li = [elem*2 for elem in li]
>>> li [2, 18, 16, 8]
Aquí está la lista por comprensión de la función buildConnectionString que declaramos en Capítulo 2:
["%s=%s" % (k, v) for k, v in params.items()]
Primero, comprobará que está llamando a la función items del diccionario params. Esta función devuelve una lista de tuplas con todos los datos del diccionario.
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys()['server', 'uid', 'database', 'pwd'] >>> params.values()
['mpilgrim', 'sa', 'master', 'secret'] >>> params.items()
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
Ahora veamos qué hace buildConnectionString. Toma una lista, params.items(), y la inyecta en una nueva lista aplicando formato de cadenas a cada elemento. La nueva lista contendrá el mismo número de elementos que params.items(), pero cada uno de estos nuevos elementos será una cadena que contenga una clave y su valor asociado en el diccionario params.
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.items() [('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')] >>> [k for k, v in params.items()]['server', 'uid', 'database', 'pwd'] >>> [v for k, v in params.items()]
['mpilgrim', 'sa', 'master', 'secret'] >>> ["%s=%s" % (k, v) for k, v in params.items()]
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
| Observe que estamos usando dos variables para iterar sobre la lista params.items(). Éste es otro uso de la asignación multivariable. El primer elemento de params.items() es ('server', 'mpilgrim'), de manera que en la primera iteración de la lista por comprensión, k será 'server' y v será 'mpilgrim'. En este caso estamos ignorando el valor de v y sólo incluimos el valor de k en la lista devuelta, de manera que esta lista acaba siendo equivalente a params.keys(). | |
| Aquí hacemos lo mismo, pero ignoramos el valor de k, así que la lista acaba siendo equivalente a params.values(). | |
| Combinar los dos ejemplos anteriores con formato de cadenas sencillo nos da una lista de cadenas que incluye tanto la clave como el valor de cada elemento del diccionario. Esto se parece sospechosamente a la salida del programa. Todo lo que nos queda es juntar los elementos de esta lista en una sola cadena. |
<< Formato de cadenas |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Unir listas y dividir cadenas >> |