Python:检查文本文件中的匹配值

时间:2015-12-18 22:19:19

标签: python dictionary

我有一个由多行组成的文本文件。每行都有多个字符串和整数值。 文本示例如下:

>|P1|Pa|,1,2,7,4
>|P2|Pa|,7,9,0,3
>|Pa|P1|,5,5,7,2
>|Pa|P2|,2,3,8,4
>|Pb|Pa|,8,4,3,1

垂直条之间的值(例如P1和Pa)是每条线的标识符。 我想编写一个代码来识别具有相同标识符的相互行,并为它们分配相同的数字。所以第一行和第三行的最后一个值应为1.程序的输出应如下:

>|P1|Pa|,1,2,7,4,1
>|P2|Pa|,7,9,0,3,2
>|Pa|P1|,5,5,7,2,1
>|Pa|P2|,2,3,8,4,2
>|Pb|Pa|,8,4,3,1,3

为了解决这个问题,我创建了一个字典,将标识符作为键,并将数字指定为值。但是,我无法正确地将数字分配给相互的行。以下代码:

import sys

h=(sys.argv[1])
q_d={}
count=0
with open(h)as f:
    for line in f:
        if line.startswith('>'):
        count=count+1
        line=line.strip('\n')
        ID=line.split('|')
        q=ID[1]
        s=ID[2]
        q_d[str(q)]=count
        if q_d.has_key(q):
            print line+','+str(q_d[q])
        elif q_d.has_key(s):
            print line+','+str(q_d[s])

这是我得到的输出:

>|P1|Pa|,1,2,7,4,1
>|P2|Pa|,7,9,0,3,2
>|Pa|P1|,5,5,7,2,3
>|Pa|P2|,2,3,8,4,4

如何将相同的数字分配给相互的行到词典中?

1 个答案:

答案 0 :(得分:0)

使用与订单无关的集合。伪代码:

q_d = set()
...
if (q, s) in q_d:
    ...
else:
    q_d.add((q, s))