我已经定义了一个从文件读入的字符串
str = """foo\t1039|1736|t3958\n
frombric\t1039\n
bonn\t\n"""
我希望这样输出:
1039\tfoo
1736\tfoo
3958\tfoo
注意,重复基因(1039)仅输出一次,与第一次出现的描述相关联。另请注意,可能没有与描述符相关的数字(基因)(在这种情况下为bonn)
我的方法是将基因作为字符串列表冗余地添加到字典中,同时还保留一组基因,我最终用它来为中的每个键提取基因环。 据我所知,下面的代码必须导致只有唯一基因的外印,因为循环的最终迭代集合中的唯一值。然而,虽然事情正在运行,我得到了我想要的输出形状,但我很困惑为什么它似乎并不总是这个列表只包含UNIQUE基因的情况..
for filename in fileList:
f = open("filename")
data = f.readlines()
uniquegene = set()
d = defaultdict(list)
for line in data:
parts = line.split('\t')
desc = parts[0]
try:
genes = parts[1].split('|')
d[desc] += genes
for gene in genes:
uniquegene.append(i)
except IndexError:
print " there are no genes on this line"
result=""
for u in uniquegene:
result += "%s\t%s\t%s\n" % (u, filename [key for key in d if u in d[key]])
print result
我真的很感激帮助我找到我的错误。 (上面的代码比我的代码简化了一点)。谢谢。
答案 0 :(得分:0)
我不太明白为什么你要保留一组独特的基因,以及描述符的字典到基因列表。我想你想要做的是建立一个Descriptor字典 - >一组基因,除非你还需要维护一个字典,其中包含每个描述符所有基因出现的完整有序列表:
d = defaultdict(set)
for line in data:
parts = line.split('\t')
desc = parts[0]
try:
genes = parts[1].split('|')
for gene in genes:
d['desc'].add(gene)
except IndexError:
print " there are no genes on this line"
如果您需要维护完整(非唯一)字典,那么我会将其保留为您的真实数据表示,并在输出时过滤结果:
for k,v in d.iteritems():
for g in set(v):
result += "%s\t%s\n" % (g, k)
print result