2013-06-17 19 views
7

Ho una lista come questa:Come convertire questa lista nel dizionario in Python?

paths = [['test_data', 'new_directory', 'ok.txt'], ['test_data', 'reads_1.fq'], ['test_data', 'test_ref.fa']] 

voglio convertire questo in dizionario come questo:

{'test_data': ['ok.txt', 'reads_1.fq'], 'test_data/new_directory', ['ok.txt']} 

La lista è dinamica. Lo scopo di questo è creare una struttura ad albero semplice. Voglio farlo utilizzando itertools come questo:

from itertools import izip 
i = iter(a) 
b = dict(izip(i, i)) 

È possibile qualcosa del genere? Grazie

+2

penso test_data deve essere: ' 'test_data': [ 'reads_1.fq', 'test_ref.fa']'. –

risposta

4

Sì, è possibile, utilizzare collections.defaultdict:

>>> from collections import defaultdict 
>>> dic = defaultdict(list) 
>>> lis = [['test_data', 'new_directory', 'ok.txt'], ['test_data', 'reads_1.fq'], 
for item in lis:                       
    key = "/".join(item[:-1]) 
    dic[key].append(item[-1]) 
...  
>>> dic 
defaultdict(<type 'list'>, 
{'test_data': ['reads_1.fq', 'test_ref.fa'], 
'test_data/new_directory': ['ok.txt']}) 

utilizzando semplici dict:

>>> dic = {} 
>>> for item in lis: 
    key = "/".join(item[:-1]) 
    dic.setdefault(key, []).append(item[-1]) 
...  
>>> dic 
{'test_data': ['reads_1.fq', 'test_ref.fa'], 
'test_data/new_directory': ['ok.txt']} 
+0

+1 Ho fatto la stessa cosa ma ho pensato che la mia uscita fosse sbagliata (sembra che l'OP fosse sbagliata) – jamylak

+0

Brillante! Grazie compagno!! Accetterò la risposta quando posso. – pynovice

15

può provare anche questo,

list1=['a','b','c','d'] 
list2=[1,2,3,4] 

vogliamo comprimere queste due liste e creare un dizionario dict_list

dict_list = zip(list1, list2) 
dict(dict_list) 

questo darà:

dict_list = {'a':1, 'b':2, 'c':3, 'd':4 } 
+0

benvenuto in stackoverflow! –

+0

:) Grazie @CorleyBrigman – SriSree

Problemi correlati