2013-06-17 13 views
7

Mam listę takiego:Jak przekonwertować tę listę na słownik w Pythonie?

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

chcę przekonwertować to do słownika tak:

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

lista jest dynamiczna. Celem tego jest stworzenie prostej struktury drzewa. Chcę to zrobić za pomocą itertools takich jak to:

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

Czy coś takiego jest możliwe? Dzięki

+2

myślę test_data musi być: ' 'test_data': [ 'reads_1.fq', 'test_ref.fa']'. –

Odpowiedz

4

Tak jest to możliwe, należy używać 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']}) 

za pomocą prostych 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 Zrobiłem to samo, ale myślałem, że moje wyniki były błędne (wydaje się, że OP było źle) – jamylak

+0

Genialny! Dzięki stary!! Przyjmuję odpowiedź, kiedy tylko mogę. – pynovice

15

można spróbować także

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

chcemy zip te dwie listy i stwórz słownik dict_list

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

to da:

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

witamy w stackoverflow! –

+0

:) Dzięki @CorleyBrigman – SriSree

Powiązane problemy