You are here: Partenza > Dive Into Python > Conoscere Python > Mappare le liste | << >> | ||||
Dive Into PythonPython per programmatori esperti |
Una delle più potenti caratteristiche di Python sono le list comprehension (descrizioni di lista), che utilizzano una tecnica compatta per mappare una lista in un'altra, applicando una funzione ad ognuno degli elementi della lista.
>>> 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]
["%s=%s" % (k, v) for k, v in params.items()]
Notate che state chiamando la funzione items del dizionario params. Questa funzione ritorna una lista di tuple di tutti i dati del dizionario.
>>> 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')]
Adesso guardiamo cosa fa la funzione buildConnectionString. Prende una lista, params.items() e la mappa in una nuova lista applicando la formattazione delle stringhe ad ogni elemento. La nuova lista avrà lo stesso numero di elementi di params.items(), ma ogni elemento della nuova lista sarà una stringa che contiene una chiave ed il relativo valore associato, proveniente dal dizionario 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']
Notate che stiamo usando due variabili per iterare attraverso la lista params.items(). Questo è un altro uso dell'assegnamento multi-variabile. Il primo elemento di params.items() è ('server', 'mpilgrim'), perciò nella prima iterazione della list comprehension, k otterrà il valore 'server' e v otterrà 'mpilgrim'. In questo caso, ignorando il valore di v ed includendo solo il valore di k nella lista di ritorno, questa descrizione di lista finirà per essere equivalente a params.keys(). (Voi non usereste mai una descrizione di lista come questa in codice reale; è solo un semplice esempio per farvi capire ciò che avviene.) | |
Qui stiamo facendo la stessa cosa, ma ignorando il valore di k, così che questa list comprehension diventi equivalente a params.values(). | |
Combinando i due esempi precedenti con qualche semplice formattazione di stringa, otteniamo una lista di stringhe che includono sia la chiave che il valore di ogni elemento del dizionario. Questo pare sospetto, come l'output del programma; tutto quello che rimane è unire gli elementi di questa lista in una singola stringa. |
<< Formattare le stringhe |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
Concatenare liste e suddividere stringhe >> |