2013-02-20 22 views
6

Ho una lista di liste con una struttura molto particolare, sembra che il seguente:Da una lista di liste a un dizionario

lol = [['geo','DS_11',45.3,90.1,10.2],['geo','DS_12',5.3,0.1,0.2],['mao','DS_14',12.3,90.1,1],...] 

mi piacerebbe trasformare questo lol (lista di liste) in un dizionario della forma seguente (si noti che il secondo elemento di ciascuna lista nel lol si suppone essere unico in tal modo una buona chiave, per il mio dict:

dict_lol = {'DS_11': ['geo','DS_11',45.3,90.1,10.2], 'DS_12':['geo','DS_12',5.3,0.1,0.2], 'DS_14':['mao','DS_14',12.3,90.1,1],...} 

ho potuto fare un ciclo for, ma ero alla ricerca di un modo più elegante e poderoso di farlo.

Grazie!

risposta

6

Utilizzare la comprensione dizionario, disponibile in pitone 2.7+

In [93]: {x[1]:x for x in lol} 
Out[93]: 
{'DS_11': ['geo', 'DS_11', 45.3, 90.1, 10.2], 
'DS_12': ['geo', 'DS_12', 5.3, 0.1, 0.2], 
'DS_14': ['mao', 'DS_14', 12.3, 90.1, 1]} 
5

Questa è la soluzione più Pythonic, credo, utilizzando dictionary comprehensions:

dict_lol = {item[1]: item for item in lol} 

Nel caso in cui non è disponibile (ad es. in Python < 2.7), è possibile utilizzare la seguente soluzione:

dict_lol = dict((item[1], item) for item in lol) 
2

Mi piace:

{l[1]:l for l in lol}