我有一个由多行组成的文本文件。每行都有多个字符串和整数值。 文本示例如下:
>|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
如何将相同的数字分配给相互的行到词典中?
答案 0 :(得分:0)
使用与订单无关的集合。伪代码:
q_d = set()
...
if (q, s) in q_d:
...
else:
q_d.add((q, s))