文件中的字典仅显示最后一行

时间:2016-11-09 14:02:14

标签: python dictionary split

我有一个包含994行和7列的.txt文件。第二列有一个蛋白质残基的名称,与第3列上的残基相互作用。其余的右边是分数(前两个无关紧要)。

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

这是我的代码:

>>> 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 个答案:

答案 0 :(得分: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的赋值运算符周围添加了空格。