【问题标题】:Dividing dicionary values by other list将字典值除以另一个列表
【发布时间】:2021-04-17 11:58:56
【问题描述】:

我想通过将它们除以列表来计算我在字典中的值的概率。 这是字典:

PPM = {'A': [1, 4, 1, 0, 0, 3, 4, 1, 1, 3, 0, 2, 0], 'T': [3, 0, 0, 0, 6, 1, 0, 2, 3, 3, 2, 3, 0],
       'C': [1, 2, 1, 0, 0, 2, 1, 0, 1, 0, 4, 0, 4], 'G': [1, 0, 4, 6, 0, 0, 1, 3, 1, 0, 0, 1, 2]}

我想用这个列表的长度来划分每个数字:

sequences = ["GAGGTAAACTCTG", "TCCGTAAGTTTTC", "CAGGTTGGAACTC", "ACAGTCAGTTCAC",
         "TAGGTCATTACAG", "TAGGTACTGATGC"]

我尝试做一个类似这样的 for 循环:

PPM = {}
for k in PFM:
PPM[k]= [((x[i]/len(sequences)) == k for x in PFM) for i in range(len(PFM))]

但结果是这样的:

{'A': [<generator object <listcomp>.<genexpr> at 0x0000022407181580>, <generator object <listcomp>.<genexpr> at 0x0000022407181820>, <generator object <listcomp>.<genexpr> at 0x0000022407181F90>, <generator object <listcomp>.<genexpr> at 0x0000022407181970>], 'T': [<generator object <listcomp>.<genexpr> at 0x0000022407181F20>, <generator object <listcomp>.<genexpr> at 0x00000224071819E0>, <generator object <listcomp>.<genexpr> at 0x00000224071816D0>, <generator object <listcomp>.<genexpr> at 0x00000224071817B0>], 'G': [<generator object <listcomp>.<genexpr> at 0x00000224060FEF20>, <generator object <listcomp>.<genexpr> at 0x00000224060FEB30>, <generator object <listcomp>.<genexpr> at 0x00000224060FE9E0>, <generator object <listcomp>.<genexpr> at 0x00000224060FEF90>], 'C': [<generator object <listcomp>.<genexpr> at 0x00000224060FE820>, <generator object <listcomp>.<genexpr> at 0x000002240717C190>, <generator object <listcomp>.<genexpr> at 0x000002240717CE40>, <generator object <listcomp>.<genexpr> at 0x000002240717CEB0>]}

我是 python 新手,所以我真的不明白我所做的有什么问题。 感谢您的帮助!

【问题讨论】:

  • 你能分享一下预期的输出吗?
  • 什么是 PFM? [填充 SO 字符限制。]
  • 你的 PPM 首先是一个 dict(),然后是一个空的 dict()

标签: python list dictionary biopython


【解决方案1】:

如果我正确理解了您的问题(如果这不是您的意思,请纠正我/澄清),您可以使用以下字典理解:

result = {k: [i/len(sequences) for i in v] for k, v in PPM.items()}

{'A': [0.16666666666666666,
       0.6666666666666666,
       0.16666666666666666,
       0.0,
       0.0,
       0.5,
       0.6666666666666666,
       0.16666666666666666,
       0.16666666666666666,
       0.5,
       0.0,
       0.3333333333333333,
       0.0],
 'C': [0.16666666666666666,
       0.3333333333333333,
       0.16666666666666666,
       0.0,
       0.0,
       0.3333333333333333,
       0.16666666666666666,
       0.0,
       0.16666666666666666,
       0.0,
       0.6666666666666666,
       0.0,
       0.6666666666666666],
 'G': [0.16666666666666666,
       0.0,
       0.6666666666666666,
       1.0,
       0.0,
       0.0,
       0.16666666666666666,
       0.5,
       0.16666666666666666,
       0.0,
       0.0,
       0.16666666666666666,
       0.3333333333333333],
 'T': [0.5,
       0.0,
       0.0,
       0.0,
       1.0,
       0.16666666666666666,
       0.0,
       0.3333333333333333,
       0.5,
       0.5,
       0.3333333333333333,
       0.5,
       0.0]}

【讨论】:

    【解决方案2】:

    不完全确定我是否得到了您所需要的,但如果您想更新您的字典,以便字典列表中的每个元素都除以序列列表的长度,您可以尝试:

    for key, value in PPM.items():
        value = [
            number/len(sequences)
            for number in value
            if sequences
        ]
        PPM.update({key:value})
    

    如果您不想更新原来的字典,您可以类似地创建一个新字典:

    p = {
        key: [
                number/len(sequences) 
                for number in value 
                if sequences
            ]
        for key, value in PPM.items() 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 2019-07-15
      • 2017-11-18
      • 1970-01-01
      • 2016-09-14
      • 2021-09-07
      • 1970-01-01
      • 2020-12-30
      相关资源
      最近更新 更多