为什么我得到错误类型错误:unhashable type:'list'?

2024-09-27 07:26:27 发布

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

RNA_codon_dictonary = {
    'UUU': 'F',     'CUU': 'L',     'AUU': 'I',     'GUU': 'V',
    'UUC': 'F',     'CUC': 'L',     'AUC': 'I',     'GUC': 'V',
    'UUA': 'L',     'CUA': 'L',     'AUA': 'I',     'GUA': 'V',
    'UUG': 'L',     'CUG': 'L',     'AUG': 'M',     'GUG': 'V',
    'UCU': 'S',     'CCU': 'P',     'ACU': 'T',     'GCU': 'A',
    'UCC': 'S',     'CCC': 'P',     'ACC': 'T',     'GCC': 'A',
    'UCA': 'S',     'CCA': 'P',     'ACA': 'T',     'GCA': 'A',
    'UCG': 'S',     'CCG': 'P',     'ACG': 'T',     'GCG': 'A',
    'UAU': 'Y',     'CAU': 'H',     'AAU': 'N',     'GAU': 'D',
    'UAC': 'Y',     'CAC': 'H',     'AAC': 'N',     'GAC': 'D',
    'UAA': 'Stop',  'CAA': 'Q',     'AAA': 'K',     'GAA': 'E',
    'UAG': 'Stop',  'CAG': 'Q',     'AAG': 'K',     'GAG': 'E',
    'UGU': 'C',     'CGU': 'R',     'AGU': 'S',     'GGU': 'G',
    'UGC': 'C',     'CGC': 'R',     'AGC': 'S',     'GGC': 'G',
    'UGA': 'Stop',  'CGA': 'R',     'AGA': 'R',     'GGA': 'G',
    'UGG': 'W',     'CGG': 'R',     'AGG': 'R',     'GGG': 'G'
}


def RNA_to_Protien(mRNA_seq):
    codon = []
    if codon in RNA_codon_dictonary:
        # return the aminoacid by looking up in the dictionary:
        return RNA_codon_dictonary[codon]
    else:
        # return '' if we could not translate the codon:
        return '?'

if __name__ == "__main__":

    mRNA_seq = "UCAAUGUAACGCGCUACCCGGAGCUCUGGGCCCAAAUUUCAUCCACU"

    print (RNA_to_Protien(mRNA_seq))

Tags: thetoinreturnifuuuseqrna
1条回答
网友
1楼 · 发布于 2024-09-27 07:26:27

您正在检查空列表是否是字典中的键。这有两个问题:

1)答案总是否定的,因为你的字典没有空键,而且

2)该操作甚至是不允许的,因为list永远不允许是dict的键。在

根据您的注释,以下代码可能就是您要查找的代码。它在长度为3的非重叠子字符串中中断序列,在dict中查找每个子字符串,并返回所有结果。在

def RNA_to_Protien(mRNA_seq):
    return [
        RNA_codon_dictonary.get(mRNA_seq[i:i+3], '?')
        for i in range(0, len(mRNA_seq), 3)
    ]

在示例序列中,将返回:

^{pr2}$

或者,如果您希望查找重叠序列,请尝试以下操作:

def RNA_to_Protien(mRNA_seq):
    return [
        RNA_codon_dictonary.get(mRNA_seq[i:i+3], '?')
        for i in range(0, len(mRNA_seq)-2, 1)
    ]

结果如下:

['S', 'Q', 'N', 'M', 'C', 'V', 'Stop', 'N', 'T', 'R', 'A', 'R', 'A', 'L', 'Y', 'T', 'P', 'P', 'R', 'G', 'E', 'S', 'A', 'L', 'S', 'L', 'W', 'G', 'G', 'A', 'P', 'P', 'Q', 'K', 'N', 'I', 'F', 'F', 'S', 'H', 'I', 'S', 'P', 'H', 'T']

并且,根据您返回单个字符串而不是字符串列表的请求:

def RNA_to_Protien(mRNA_seq):
    return ''.join(
        RNA_codon_dictonary.get(mRNA_seq[i:i+3], '?')
        for i in range(0, len(mRNA_seq), 3)
    )

这就产生了:

'SMStopRATRSSGPKFHP?'

相关问题 更多 >

    热门问题