2016-11-09 2 views
0

У меня есть .txt-файл с 994 строками и 7 столбцами. Вторая колонка имеет название белка, который взаимодействует с остатком на третьей колонке. Остальные из них справа - это оценки (первые два не имеют значения).Словарь из файла показывает только последнюю строку

Я пытаюсь превратить это в словарь с элементами во втором столбце в качестве ключа, а остальные - как значения ключа. Проблема в том, что она, кажется, только что помещается в последнюю строку.

Это мой код:

>>> f=open('C:/Users/Alex/Documents/1TRKGremlin.txt') 
>>> dict={} 
>>> for line in f: 
... lsplit=line.split() 

>>> try:dict[lsplit[2]].appendl(lsplit[3:]) 
... except KeyError: dict[lsplit[2]]=[lsplit[3:]] 

>>>print dict[]#here I only get the last line of the file 

файл выглядит следующим образом:

i j i_id j_id r_sco s_sco prob 
205 208 205_K 208_E 0.5625 3.889 1.000 
557 660 557_I 660_A 0.5471 3.783 1.000 
425 439 425_M 439_G 0.5462 3.776 1.000 
19 76 19_A 76_S 0.4867 3.365 1.000 
436 462 436_K 462_P 0.4770 3.298 1.000 
579 661 579_K 661_Q 0.4446 3.074 1.000 

Спасибо!

ответ

1

Ваш цикл for работает до завершения, прежде чем вы установите что-либо в dict. В dict записи должны быть инициализированы в цикле, так как только цикл закончен, у вас есть только значение lsplit для последней строки:

>>> f = open('C:/Users/Alex/Documents/1TRKGremlin.txt') 
>>> mydict = {} 
>>> for line in f: 
... lsplit = line.split() 
... try: 
...  mydict[lsplit[2]].append(lsplit[3:]) 
... except KeyError: 
...  mydict[lsplit[2]] = [lsplit[3:]] 
... 
>>> print mydict 

Side-примечание: я переименовал свой словарь в mydict. Никогда не называйте переменную с тем же именем, что и встроенный Python, или вы будете скрывать встроенный, что делает его непригодным для области действия переменной и вызывает путаные ошибки. Я также исправил некоторые опечатки и добавил пространства вокруг операторов присваивания за PEP8.

+0

Спасибо за предложения, сейчас он работает. – Alexandra