2016-11-09 43 views
0

我有一个带有994行和7列的.txt文件。第二栏列出了与第三栏残留物相互作用的蛋白质残基的名称。其余的右边是分数(前两个不重要)。文件中的字典只显示最后一行

我想把它变成一个字典,第二列的元素作为关键字,其余作为关键值。问题是它似乎只是放在最后一行。

这是我的代码:

>>> 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 

侧面说明:我改名为你的字典mydict。永远不要将变量命名为与内置Python相同的名称,否则将影响内置变量,使其不适用于变量范围,并导致混淆错误。我还修复了一些错别字,并在PEP8附近增加了赋值运算符周围的空格。

+0

感谢您的建议,它现在可以工作。 – Alexandra