字典:检查所选键的值

时间:2014-04-07 10:42:42

标签: python bioinformatics

下面你可以找到用于计算给定序列中蛋白质质量的简单脚本

import re


def make_table(yy):
    letter=r"^[A-Z]"
    mass= r"[0-9]{1,2}"
    #list of aa
    table=open(yy,'r')
    aa=[i for line in table for i in line if re.match(letter,i)]
    table.close()


    table=open(yy,'r').readlines()
    xz=''.join([line[:-1] for line in table])
    mass= re.findall(r"[-+]?\d*\.\d+|\d+", xz)


    data = dict(zip(aa, mass))
    #print data
    calc_mass(seq, data)


def calc_mass(seq, data):
    mass=[]
    test=[]

    for key, value in data.iteritems():
        for aa in seq:
            if aa==key:
                #print aa, value #debug
                test.append(aa)
                mass.append(float(value))
    if test==seq:
        print "OK!"

    mass_value=sum(mass)
    print "The protein mass is %f" %(mass_value)


# DATASET
yy="table.txt"
input=open("sequence.txt",'r').readline().strip()

seq=list(input)

make_table(yy)

它基于给定的序列和表格,其中列出了每种氨基酸的每个质量。简而言之,它需要一些看起来像

的text.txt数据
A   71.03711
C   103.00919
D   115.02694
E   129.04259
F   147.06841
G   57.02146
H   137.05891
I   113.08406
K   128.09496
L   113.08406
M   131.04049
N   114.04293
P   97.05276
Q   128.05858
R   156.10111
S   87.03203
T   101.04768
V   99.06841
W   186.07931
Y   163.06333

并将其转换为字典,然后在给定的序列中找到给定aa的相应质量。除了无法通过

之外,这个脚本工作得很完美
if test==seq:
    print "OK!"

因为seq和测试变量中氨基酸的顺序不同。如何在这样的迭代(在测试中获得)之后恢复初始顺序(在seq中给出)?是否还有其他可能性来检查所选键的值并将其移到单独的列表中?

感谢您的帮助,

格列勃

1 个答案:

答案 0 :(得分:1)

而不是遍历整个data并检查key是否匹配seq中的任何内容,实际上使用它是字典的事实

for aa in seq:
    mass.append(float(data[aa]))

现在massseq的顺序相同 - 如果在KeyError中找不到任何aa,则会data }。