首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在for循环中从不同字典中求和值

在for循环中从不同字典中求和值
EN

Stack Overflow用户
提问于 2020-06-10 05:12:22
回答 2查看 221关注 0票数 0

因此,我试图编写一个代码来做以下事情:

  1. 将多个列表添加到列表中。(含蛋白质序列;氨基酸)

  1. 计数每个氨基酸(str)中有多少,每个序列(列表)。

  1. 创建一个字典,将每个键(氨基酸)与特定的值(分子量)

关联起来。

  1. 得到

的总分子量(每一个氨基酸的个数乘以它的相关值)。

  1. 求和每个蛋白质序列的总值(列表)。

问题是,我可以得到每本字典的和,但我不能把这些字典的最终值和起来。你知道解决这个问题的方法吗?

代码语言:javascript
复制
    # Add different list of protein sequences (proteinx) into a list of lists (proteins)
    proteins=[]

    protein1= ['ALA', 'VAL', 'GLY', 'GLU', 'ALA', 'ALA', 'GLY', 'PHE', 'VAL', 'TYR', 'THR', 'Y', 'A', 'W']

    protein2= ['MET', 'K', 'F', 'G', 'N', 'F', 'L', 'LEU', 'T', 'Y', 'Q', 'P', 'P', 'E', 'L', 'SER', 'Q', 'T', 'A','W','CYS','C']

    # Add different list of protein sequences (proteinx) into a list of lists (proteins)
    proteins.append(protein1)
    proteins.append(protein2)

    # Count how many amino acids there are in each list (protein sequence)

    for protein in proteins:
        CAla=(protein.count('A') + protein.count('ALA'))
        CArg=(protein.count('R') + protein.count('ARG'))
        CAsn=(protein.count('N') + protein.count('ASN'))
        CAsp=(protein.count('D') + protein.count('ASP'))
        CCys=(protein.count('C') + protein.count('CYS'))
        CGln=(protein.count('Q') + protein.count('GLN'))
        CGlu=(protein.count('E') + protein.count('GLU'))
        CGly=(protein.count('G') + protein.count('GLY'))
        CHis=(protein.count('H') + protein.count('HIS'))
        CIle=(protein.count('I') + protein.count('ILE'))
        CLeu=(protein.count('L') + protein.count('LEU'))
        CLys=(protein.count('K') + protein.count('LYS'))
        CMet=(protein.count('M') + protein.count('MET'))
        CPhe=(protein.count('F') + protein.count('PHE'))
        CPro=(protein.count('P') + protein.count('PRO'))
        CSer=(protein.count('S') + protein.count('SER'))
        CThr=(protein.count('T') + protein.count('THR'))
        CTrp=(protein.count('W') + protein.count('TRP'))
        CTyr=(protein.count('Y') + protein.count('TYR'))
        CVal=(protein.count('V') + protein.count('VAL'))

      #Create a dictionary to associate each amino acid to its molecular weight and the number of each amino acid
      AAmolma = {'Ala': [CAla * (89)], 'Arg': [CArg * (174)], 'Asn': [CAsn * (132)],
           'Asp': [CAsp * (133)], 'Cys': [CCys * (121)], 'Gln': [CGln * (146)], 'Glu': [CGlu * (147)],
           'His': [CHis * (155)], 'Ile': [CIle * (131)], 'Leu': [CLeu * (131)], 'Lys': [CLys * (146)],
           'Met': [CMet * (149)], 'Phe': [CPhe * (165)], 'Pro': [CPro * (115)], 'Ser': [CSer * (105)],
           'Thr': [CThr * (119)], 'Trp': [CTrp * (204)], 'Tyr': [CTyr * (181)], 'Val': [CVal * (117)], 
           'Gly': [CGly * (75)]}

      #sum all the values in each dictionary and then the total value of each dictionary
        parmw=0
        for mw in AAmolma.values():
            parmw+=sum(mw)
        print(parmw)

     totmw=0
     for i in parmw:
         totmw+=sum(parmw)

我得到的是:

代码语言:javascript
复制
1737
2953
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-145-43b4557ce807> in <module>
     38 
     39 totmw=0
---> 40 for i in parmw:
     41     totmw+=sum(parmw)
     42 

TypeError: 'int' object is not iterable

在这个特殊的例子中,我想要做的就是找出4772953来得到4690。

谢谢你!!希望有人能帮忙!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-10 06:10:25

你没有完全按照你提供的指示行事。对于第3步,您应该“创建一个字典,将每个键(氨基酸)与一个特定的值(分子量)相关联”,该字典看起来就像:

代码语言:javascript
复制
AAmolma = {'Ala': 89, 'Arg': 174, .....

你把数乘以,然后把它写进字典。这就违背了使用字典的意义。在使用[CAla * (89)]输入值时,您还创建了一个列表,但是这里不需要列表。它是一个条目列表,总是一个条目列表。这就是为什么以后需要使用sum(mw)来获取值,而不仅仅是mw

下一个问题是,您在您的计数器(如CAla )中累计了所有列表的计数。你应该独立计算每一个序列。

最后,您应该“将每个蛋白质序列(列表)的总价值相加”,所以对于您的例子,应该有两个答案,因为您有两个序列。

如果将字典定义向上移动,则可以将for循环更改为如下所示

代码语言:javascript
复制
   for protein in proteins:
    total = (
      (protein.count('A') + protein.count('ALA')) * AAmolma['Ala'] +
      (protein.count('R') + protein.count('ARG')) * AAmolma['Arg'] +
      ....
    )
    print(total)

我还希望将被计算到某些常量列表或元组中的项(如(('A', 'ALA', 'Ala'), ('R', 'ARG', 'Arg'), .. )进行迭代,而不是所有这些重复的代码,但您可以作为第二步进行。

票数 0
EN

Stack Overflow用户

发布于 2020-06-10 06:00:58

问题是,您试图迭代一个整数(注意,由于sum(parmw),第41行也会出现一个错误,一种解决方案是将totmw = 0放在for循环之外,然后在计算parmw之后将totmw = 0放在totmw += parmw之外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62296308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档