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

Python:检查文本文件中的匹配值,python,dictionary,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,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 垂

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

>|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,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
垂直条之间的值(如P1和Pa)是每条线的标识符。 我想写一个代码,用相同的标识符重新识别相互的行,并给它们分配相同的编号。所以第一行和第三行的最后一个值应该是1。程序的输出应如下所示:

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

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

使用与顺序无关的集合。Psuedo代码:

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

不要使用
elif
而是在一个
if
语句中使用
。或者像qwr建议的那样,将键设为元组。