2013-06-17 18 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