【问题标题】:Dictionaries: checking values for selected keys字典:检查选定键的值
【发布时间】:2014-04-07 18:53:48
【问题描述】:

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

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)

它基于给定的序列和列出每个氨基酸的每个质量的表格。简而言之,它需要一些文本 table.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 中给出)?是否还有其他可能检查所选键的值并将其移动到单独的列表中?

感谢您的帮助,

格莱布

【问题讨论】:

  • 您能否解释一下这是输入,这是我所期望的,以及您的 sequence.txt 的样子。这样会更容易理解。
  • 请提供示例seqdata。如果make_table 有效,您可以将其完全从您的问题中删除。
  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask

标签: python bioinformatics


【解决方案1】:

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

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

现在mass 将与seq 的顺序相同 - 如果在data 中找不到任何aa,这将引发KeyError

【讨论】:

  • 感谢您的建议。我进行了这样的迭代,以便同时使用 dict 中的键和值进行操作。在您的示例中,您将展示如何在 [mass] 中为 seq 中的对应键附加值是否可以为键设置相同的值(以获取已按与 seq 中相同的顺序附加值的键列表实例)?
  • @user3470313 你已经有了,只是seq!否则,如果找不到密钥,则抛出 KeyError
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2016-11-14
  • 2022-11-10
  • 2019-04-19
  • 2019-03-29
相关资源
最近更新 更多