将字典代码合并到De Bruijn图形代码中

时间:2017-09-30 16:54:16

标签: python

这是一项正在进行的课程作业。自从我上次发布一个问题以来,我想到了一些事情。我正在阅读丢失的生物信息学算法帖子,我想我已经知道我必须做什么。简而言之,我们在文本文件中给出了一个kmers列表,看起来像这样(没有行空间):

GAGT

AATC

GCTC

我们假设使用Euler算法来构造超弦。我一直在阅读的大部分内容都需要构建deBruijn图以便找到Euler的路径。为此,我决定打开我的kmer文本文件,并使用以下代码创建一个字典:

with open('kmers.txt') as f:
lines=f.read()
spl=lines.split()[1:]
dic=dict((i,x.strip()) for i,x in enumerate(spl))
print (dic)

这很好用(输出):

{0:'AACA',1:'AACG',2:'AAGG',3:'ACAC',4:'ACAG',5:'ACGC',6:'ACGG',7:'ACTG ',8:'AGCA',9:'AGGA',10:'AGGC',11:'ATCA',12:'ATTC',13:'CAAG',14:'CACA',15:'CACG', 16:'CAGG',17:'CATC',18:'CGCG',19:'CGGT',20:'CGTA',21:'CGTG',22:'CTAA',23:'CTCT',24: 'CTGG',25:'CTTA',26:'GACT',27:'GCAT',28:'GCGT',29:'GCTC',30:'GCTT',31:'GGAC',32:'GGCA ',33:'GGCT',34:'GGGT',35:'GGTG',36:'GGTT',37:'GTAT',38:'GTGC',39:'GTGG',40:'GTTT', 41:'TAAA',42:'TAAC',43:'TATT',44:'TCAA',45:'TCAC',46:'TCGT',47:'TCTA',48:'TGCT',49: 'TGGC',50:'TGGG',51:'TTAA',52:'TTCA',53:'TTCG',54:'TTTC',55:'TTTT'}

现在,我正在尝试使用以下代码构建deBruijn图:

with open('kmers.txt') as f:
lines=f.read()
spl=lines.split()[1:]
dic=dict((i,x.strip()) for i,x in enumerate(spl))

fin = dic
edges=list(set(fin))
graph={}

for edge in edges:
frm = edge[:dic(edge)-1]
to = edge[1:]
if frm in graph:
    graph[frm].append(to)
else:
graph[frm]=[to]
for val in graph.value():
val.sort()
for k,v in sorted(graph.items()):
print(k+'->'+','.join(v))

我收到以下错误:

追踪(最近一次通话):   文件“test3.py”,第11行,in     frm = edge [:dic(edge)-1] TypeError:'dict'对象不可调用

我试图在星期一上班时间,有些功能。

1 个答案:

答案 0 :(得分:0)

问题在于您的界限:

edges=list(set(fin))

应该是

edges=list(set(fin.values()))

因为 fin 是字典,所以 edges = list(set(fin))会创建所有键的整数列表 。 你的缩进也是错的,但我知道你说你没有太多的编码经验。