【问题标题】:Matching dictionary values and generating an output whether they do or do not match in Python匹配字典值并生成输出,无论它们在 Python 中是否匹配
【发布时间】:2020-04-26 00:48:29
【问题描述】:

我的情况是,我已经组装了 5 个 DNA 序列的列表。我写了一个小循环,一次通过一个密码子位点。从这里我生成了一个字典,告诉我每个密码子位点出现了哪些密码子,代码如下所示:

for i in range(0, len(sequencesCombined[0]), 3):
codons = {}
for j in range(len(sequencesCombined)):
                    codon = sequencesCombined[j][i:i+3]
                    if codon not in codons:
                        codons[codon] = 1
                    else:
                        codons[codon] += 1
                    if len(codons) == 2:  
                        if AminoAcid_Table[codons[0]] == AminoAcid_Table[codons[1]]:
                           print('whatever my string needs to be')
                        else:
                           print('whatever my other string needs to be')
                   else:
                        pass

循环在一定程度上起作用,它循环遍历序列并每 3 个核苷酸对它们进行切片,然后读取密码子。然后它会在检查下一个密码子位点之前自行刷新。但是,我正在努力将值与另一个字典匹配来编写我的 if else 语句。

任何随机站点的输出示例可能如下所示:

'ATG':5

这告诉我在 5 个序列中有 5 个 ATG 密码子。 或者,它可能看起来像这样:

'CCT':2, 'CAA':3

因此这是一个非同义密码子替换,因为两个序列表达编码脯氨酸的密码子 CCT,而三个序列表达编码谷氨酸的密码子 CAA。在这种情况下,替换是 CCT,因为只有 2 个。(或者至少这是我被指示假设的)最终我将计算这些非同义和同义替换,但现在我只想让 python告诉我替换是同义词还是非同义词,理想情况下替换密码子是什么,因此打印功能。因此,此场景的输出可能如下所示:

'Non-Synonymous Sub, Codon: CCT'

我写了一本包含所有氨基酸及其密码子的字典,如下所示:

AminoAcid_Table = {
'TTT':'Phe','TCT':'Ser','TAT':'Tyr','TGT':'Sys', 
'TTC':'Phe','TCC':'Ser','TAC':'Tyr','TGC':'Sys',
'TTA':'Leu','TCA':'Ser','TAA':'Stop','TGA':'Stop',
'TTG':'Leu','TCG':'Ser','TAG':'Stop','TGG':'Trp',
'CTT':'Leu','CCT':'Pro','CAT':'His','CGT':'Arg',
'CTC':'Leu','CCC':'Pro','CAC':'His','CGC':'Arg',
'CTA':'Leu','CCA':'Pro','CAA':'Gln','CGA':'Arg',
'CTG':'Leu','CCG':'Pro','CAG':'Gln','CGG':'Arg',
'ATT':'Ile','ACT':'Thr','AAT':'Asn','AGT':'Ser',
'ATC':'Ile','ACC':'Thr','AAC':'Asn','AGC':'Ser',
'ATA':'Ile','ACA':'Thr','AAA':'Lys','AGA':'Arg',
'ATG':'Met','ACG':'Thr','AAG':'Lys','AGG':'Arg',
'GTT':'Val','GCT':'Ala','GAT':'Asp','GGT':'Gly',
'GTC':'Val','GCC':'Ala','GAC':'Asp','GGC':'Gly',
'GTA':'Val','GCA':'Ala','GAA':'Glu','GGA':'Gly',
'GTG':'Val','GCG':'Ala','GAG':'Glu','GGG':'Gly'}

我需要做的是让 Python 查看我的“密码子”字典输出的 3 个字母密码子,比较我的“氨基酸表”字典中的这两个密码子,如果氨基酸相同,那么我需要一个“同义词”打印出来,如果不是,我需要一个“非同义词”打印出来。

我们将不胜感激任何建议,如果以前有人问过,请留下包含信息的链接。作为答案,我很乐意投票赞成。

【问题讨论】:

  • sequencesCombined提供样本数据
  • infile = open(filename,'r') 序列 = infile.read() 序列 = sequence.split() 序列Combined.append(sequences[1])
  • 以上为我的序列生成了一个列表

标签: python python-3.x dictionary pattern-matching bioinformatics


【解决方案1】:

首先让我确认我对问题的理解是正确的。

因此,在您的字典密码子中,您要检查是否所有键都指向表中的单个氨基酸。如果他们这样做,输出是同步的,否则不是同步的,对吧?

如果是,您可以这样做来检查

amino_acid = []
for x in list(codon.keys()):
    amino_acis.append(AminoAcid_Table[x])

if len(set(amino_acid))==1:
    #There is only one type of amino_acid. So Synchronous
else:
    #Not Synchronous

【讨论】:

  • 我认为您的理解是正确的,基本上如果我的密码子字典中生成了两个密码子,我想检查这些密码子是否产生相同的氨基酸
  • 试图对此进行测试,但我得到:AttributeError: 'str' object has no attribute 'keys'
  • "codon" 是一个添加到字典“codons”中的字符串,我将您的代码从“codon”更改为“codons”,以便我指的是字典,我得到了错误: TypeError: 'list' 对象不能被解释为整数
  • 另外,如果我这样做,我会不会得到一个氨基酸列表,即使两个不同的密码子编码相同的氨基酸,我也会有两个条目,所以一切都会是非同义手表是不正确的
  • 我明白了,感谢您的帮助,我不得不调整您的代码以使其正常工作。这就是我产生的: for x in list(codons.keys()):amino_acid.append(AminoAcid_Table[x]) if amino_acid[0] ==amino_acid[1]: print('syn') else: print(' nsyn')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多