2015-07-30 1 views
1

Я только начинающий пользователь python, поэтому извиняюсь, если это довольно простой вопрос. У меня есть файл, содержащий два списка, деленные на вкладку. Я хотел бы сохранить это в словаре, поэтому каждый элемент связан с соответствующей записью после вкладки, такие, что:Разбиение файла на словарь в Python

cat hat 
mouse bowl 
rat nose 
monkey uniform 
dog whiskers 
elephant dance 

будет разделен на

{'cat'; 'hat', 'mouse' ; 'bowl') etc. etc. 

Это очень длинный список.

Это то, что я пробовал:

enhancerTAD = open('TAD_to_enhancer.map', 'r') 
list = enhancerTAD.split() 

for entry in list: 
    key, val = entry.split('\t') 
    ET[key] = val 

print ET 

Вот моя последняя попытка, и сообщение об ошибке, что я получаю ниже:

enhancerTAD = open('TAD_to_enhancer.map', 'r').read() 
ET = {} 
lst = enhancerTAD.split("\n") 
for entry in lst: 
    key, val = entry.strip().split(' ',1) 
    ET[key] = val 

enhancergene = open('enhancer_to_gene_map.txt', 'r').read() 
GE = {} 
lst1 = enhancergene.split("\n") 
for entry in lst1: 
    key, val = entry.strip().split(' ',1) 
    GE[key] = val 

geneTAD = open('TAD_to_gene_map.txt', 'r').read() 
GT = {} 
lst2 = geneTAD.split("\n") 
for entry in lst2: 
    key, val = entry.strip().split(' ',1) 
    GT[key] = val 

Файл "enhancertadmaybe.py", строка 13, в ключа, вал = entry.strip() дробление (»», 1) ValueError:. необходимость более чем 1 значение для распаковки

+0

Это не словарь, вы хотите ' set'? Также вы пробовали что-нибудь до сих пор? – Kasramvd

+2

Задавать простые вопросы очень хорошо, пока вы публикуете свои попытки, а не просто запрашиваете готовое решение. – Maroun

+2

'с открытым ('/ path/to/file') как f: dict_object = {ключ: значение для строки в f для ключа, значение в строке.split()}' – falsetru

ответ

5

Вы можете попробовать:

with open('foo.txt', 'r') as f: 
    print dict(line.strip().split('\t', 1) for line in f) 

Результат:

{'monkey': 'uniform', 'dog': 'whiskers', 'cat': 'hat', 'rat': 'nose', 'elephant': 'dance', 'mouse': 'bowl'} 
+0

Прежде всего, это не сработает, если в строке будет несколько слов. Во-вторых, он не будет разбиваться по описанию - заявлено, что они разделены вкладкой. Итак, правильное разделение должно быть 'line.strip(). Split ('\ t', 1)'. – skyking

+0

Спасибо за замечание – JuniorCompressor

+0

Я попробовал его, и он вернул «строку», не определенную ошибку. Это был мой первоначальный идти: enhancerTAD = открыт ('TAD_to_enhancer.map', 'г') список = enhancerTAD.split() для записи в списке: ключа, вал = entry.split ('\ т') ET [key] = val print ET – oliver4444

0

Модификация оригинального метода:

enhancerTAD = open('TAD_to_enhancer.map', 'r').read() 
ET={} 
lst = enhancerTAD.split("\n") 
for entry in lst: 
    key, val = entry.strip().split('\t',1) 
    ET[key] = val 
print ET 

Очки:

1.Ваш оригинальный метод не удалось, потому что пытались разделить на файл объект не содержимое файла

т.е.)

a=open("amazon1.txt","r") 
c=a.split() 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'file' object has no attribute 'split' 

2.You должны прочитать содержимое файла, чтобы разделить его

т.е.)

enhancerTAD =open("amazon1.txt","r").read() 

3.Since у вас есть ключ, пара значений в каждой строке, которую вы должны разбить по новой линии изначально

4.После вы можете пройти по списку и снова разделить его на \t и образуют словарь

Juniorcomposer метод делает все это два строки кода и является более вещий

+0

Спасибо! Но он возвращается, говоря, что объект типа не является итерируемым. Что это значит? – oliver4444

+0

@ oliver4444 Вы могли бы добавить полную трассировку, которая является строкой, в которой говорится об ошибке, и о том, что является полной ошибкой – The6thSense

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