将字典值除以其他列表

2024-05-16 01:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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新手,所以我真的不明白我所做的有什么错。 谢谢你的帮助


Tags: in列表forlen字典object概率generator
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() 
}

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

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]}

相关问题 更多 >