2013-06-17 5 views
7

У меня есть список, как это:Как преобразовать этот список в словарь в Python?

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

Я хочу, чтобы преобразовать его в словарь, как это:

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

Список является динамическим. Целью этого является создание простой древовидной структуры. Я хочу сделать это, используя itertools следующим образом:

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

Возможно ли это? Благодаря

+2

Я думаю test_data должен быть: ' 'test_data': [ 'reads_1.fq', 'test_ref.fa']'. –

ответ

4

Да, это возможно, используйте 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']}) 

с помощью простого 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 Я сделал то же самое, но я думал, что мой результат был неправильным (похоже, что OP был не прав) – jamylak

+0

Brilliant! Спасибо друг!! Я отвечу, когда смогу. – pynovice

15

можете попробовать это также,

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

мы хотим, чтобы пронестись эти два списка и создать словарь dict_list

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

это даст:

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

добро пожаловать в stackoverflow! –

+0

:) Спасибо @CorleyBrigman – SriSree

Смежные вопросы