如何在字典中查找字符串?

时间:2013-11-21 00:14:28

标签: python string dictionary

我有一个文件,其中包含一个3个字母的字符串列表(知道生物学的人的密码子)。在我的程序中,我构建了一个字典,每个特定的字符串对应一个指定的字母(对于那些了解生物学的人来说是氨基酸)。所以,我希望我的程序遍历整个字符串/密码子列表,对于每个密码子,我希望程序在字典中查找并输出给定​​密码子/字符串对应的字母。不幸的是,我没有太多使用字典的经验,所以我不确定如何查找它。我尝试了一些东西,但我一直在犯错误。变量'new_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':'I','ATC':'I','ATA':'I','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 x in new_codon:
   codon_lookup[x]
   if codon_lookup[x] == ref_aa[x]: # Here I'm comparing it to another list I have from another file to see if they match or don't match 
             print "1"
   else: 
           print "0" 

3 个答案:

答案 0 :(得分:2)

这将解决您的KeyError

for x in new_codon:
    x = x.rstrip() # remove line seperators
    ...

在评论中提问。

for x, aa in zip(new_codon, ref_aa):
    x = x.rstrip() # remove line seperators

    if codon_lookup[x] == aa: 
        print "1"
    else: 
        print "0" 

答案 1 :(得分:1)

要检查词典中的值是否使用':

for x in new_codon:
   if x in codon_lookup:
             print "1"
   else: 
           print "0" 

答案 2 :(得分:1)

如果您提出的要素不在字典中,则会得到KeyError。 而且您要求的是"ATC\r\n"而不是"ATC"。问题不在于代码的这一部分。您只是阅读带有结束字符的new_codon 您所要做的就是添加一个简单的语句来删除字符串x末尾的结束字符。

codon_lookup = {'GCT': 'A', 'GCC': 'A',...}

for x in new_codon:
   #This statement(`codon_lookup[x]`) was pointless
   x = x[:3] # Removes the part after the third character
   if codon_lookup[x] == ref_aa[x]: # Here I'm comparing it to another list I have from another file to see if they match or don't match 
           print "1"
   else: 
           print "0" 

如果ref_aa是一个列表,您当然会获得TypeErrorx是一个字符串,ref_aa是一个列表;你不能使用ref_aa[x]。要解决此问题,您可以使用enumeratedocs for enumerate):

codon_lookup = {'GCT': 'A', 'GCC': 'A',...}

for i,x in enumerate(new_codon):
   x = x[:3] # Removes the part after the third character
   if codon_lookup[x] == ref_aa[i]: # Changed the 'x' with 'i' for list 
           print "1"
   else: 
           print "0"