如何在不写20个if语句或制作20个列表/词典的情况下进行以下比较?

bio*_*mer 4 python dictionary list

这个问题与生物学有关,所以对于那些知道氨基酸和密码子是什么的人来说,这太棒了!对于那些不这样做的人,我尽力说出来,以便你能理解我在说什么.

所以我有一个密码子列表,也可以称为3个字母的字符串,它由以下四个字母的组合组成:A,G,C,T即AAT,GAT,GCT等.每个密码子对应一个特定氨基酸,但有多个密码子可以对应相同的氨基酸.为了说明这一点,请查看以下链接:http://www.cbs.dtu.dk/courses/27619/codon.html.这应该说清楚.

对于我名单上的每个密码子,我想最终找出它对应的氨基酸.因此,我必须使程序首先将该密码子与我发布链接的密码子列表(总共64个可能的密码子)进行比较,然后我必须要求程序查看该密码子对应的氨基酸.但是,我无法找到一种快捷方法,无需为与给定氨基酸相对应的所有密码子制作一个列表并进行比较,或者编写20种不同的if语句.

我所拥有的密码子列表叫做mutated_codon.因此,我需要生成一个'for',程序将mutated_codon列表中的每个密码子进行比较,并将其与字典进行比较,并输出相应的氨基酸字母.为了做到这一点,我必须编写什么代码?我不熟悉用于检查字典中的值的语法.

这是我到目前为止基于建议的内容:

codon_lookup = {'GCT':'A','GCC':'A','GCA':'A','GCG':'A','TGT':'C','TGC':'C' ,'GAT':'D','GAC':'D','GAA':'E','GAG':'E','TTT':'F','TTC':'F',' GGT':'G','GGC':'G','GGA':'G','GGG':'G','CAT':'H','CAC':'H','ATT' :'我','ATC':'我','ATA':'我','AAA':'K','AAG':'K','TTA':'L','TTG':' L','CTT':'L','CTC':'L','CTA':'L','CTG':'L','ATG':'M','AAT':'N' "AAC':'N','CCT':'P','CCC':'P','CCA':'P','CCG':'P','CAA':'Q','CAG' :'Q','CGT':'R','CGC':'R','CGA':'R','CGG':'R','AGA':'R','AGG':' R','TCT':'S','TCC':'S','TCA':'S','TCG':'S','AGT':'S','AGC':'S' ,'ACT':'T','ACC':'T','ACA':'T','ACG':'T','GTT':'V','GTC':'V',' GTA':'V','GTG':'V','TGG'='W','TAT':'Y','TAC':'Y','TAA':'Z','TAG' :'Z','TGA':'Z'}

for c in mutated_codon:
   print codon_lookup[c]
Run Code Online (Sandbox Code Playgroud)

在我的输出中,我只得到与列表中最后一个密码子相对应的氨基酸的输出,最重要的是,我得到KeyError:4.任何想法可能是错的?

Far*_*Joe 11

您可以像这样设置字典:

codon_lookup = {
    'ATT':'Isoleucine',
    'ATC':'Isoleucine', 
    'ATA':'Isoleucine',
    'CTT':'Leucine',
    'CTC':'Leucine', 
    'CTA':'Leucine',
     # ... etc
} 
Run Code Online (Sandbox Code Playgroud)

然后你可以像查询一样

codon_lookup['ATT']
Run Code Online (Sandbox Code Playgroud)

哪个会给你

'Isoleucine'
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以像这样设置字典:

codon_lookup = {
    'ATT':'I',
    'ATC':'I', 
    'ATA':'I',
    'CTT':'L',
    'CTC':'L', 
    'CTA':'L',
     # ... etc
} 
Run Code Online (Sandbox Code Playgroud)

然后你可以像查询一样

codon_lookup['ATT']
Run Code Online (Sandbox Code Playgroud)

哪个会给你

'I'
Run Code Online (Sandbox Code Playgroud)

如果你想检查你的mutated_condons字典列表,你可以像这样循环它.如果您的mutated_condons列表如下['ACA','GTT',...]:

for mutated_codon in mutated_condons:
    print codon_lookup[mutated_codon]
Run Code Online (Sandbox Code Playgroud)


Fog*_*ird 5

根据另外两个答案,这是构建它的另一种方式,我认为这可能是最好的.

这将为您提供两个方向的查找词典:SLC到Codon(s)和Codon到SLC.

slc_codon = {
    'I': ['ATT', 'ATC', 'ATA'],
    'L': ['CTT', 'CTC', 'CTA', 'CTG', 'TTA', 'TTG'],
    'V': ['GTT', 'GTC', 'GTA', 'GTG'],
    'F': ['TTT', 'TTC'],
    'M': ['ATG'],
    'C': ['TGT', 'TGC'],
    'A': ['GCT', 'GCC', 'GCA', 'GCG'],
    'G': ['GGT', 'GGC', 'GGA', 'GGG'],
    'P': ['CCT', 'CCC', 'CCA', 'CCG'],
    'T': ['ACT', 'ACC', 'ACA', 'ACG'],
    'S': ['TCT', 'TCC', 'TCA', 'TCG', 'AGT', 'AGC'],
    'Y': ['TAT', 'TAC'],
    'W': ['TGG'],
    'Q': ['CAA', 'CAG'],
    'N': ['AAT', 'AAC'],
    'H': ['CAT', 'CAC'],
    'E': ['GAA', 'GAG'],
    'D': ['GAT', 'GAC'],
    'K': ['AAA', 'AAG'],
    'R': ['CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'],
    '*': ['TAA', 'TAG', 'TGA'],
}

codon_slc = dict((x, k) for k, v in slc_codon.items() for x in v)

>>> print codon_slc
>>> {'CTT': 'L', 'ATG': 'M', 'AAG': 'K', 'AAA': 'K', 'ATC': 'I', 'AAC': 'N', 'ATA': 'I', 'AGG': 'R', 'CCT': 'P', 'ACT': 'T', 'AGC': 'S', 'ACA': 'T', 'AGA': 'R', 'CAT': 'H', 'AAT': 'N', 'ATT': 'I', 'CTG': 'L', 'CTA': 'L', 'CTC': 'L', 'CAC': 'H', 'ACG': 'T', 'CAA': 'Q', 'AGT': 'S', 'CAG': 'Q', 'CCG': 'P', 'CCC': 'P', 'TAT': 'Y', 'GGT': 'G', 'TGT': 'C', 'CGA': 'R', 'CCA': 'P', 'TCT': 'S', 'GAT': 'D', 'CGG': 'R', 'TTT': 'F', 'TGC': 'C', 'GGG': 'G', 'TAG': '*', 'GGA': 'G', 'TAA': '*', 'GGC': 'G', 'TAC': 'Y', 'GAG': 'E', 'TCG': 'S', 'TTA': 'L', 'GAC': 'D', 'TCC': 'S', 'GAA': 'E', 'TCA': 'S', 'GCA': 'A', 'GTA': 'V', 'GCC': 'A', 'GTC': 'V', 'GCG': 'A', 'GTG': 'V', 'TTC': 'F', 'GTT': 'V', 'GCT': 'A', 'ACC': 'T', 'TGA': '*', 'TTG': 'L', 'CGT': 'R', 'TGG': 'W', 'CGC': 'R'}
Run Code Online (Sandbox Code Playgroud)