KeyError: '\n' python 2.7.5
我有一个字典,我想把它和我的字符串进行比较。对于字典中的每一个键,如果它和字符串中的某个字符匹配,我希望把这个字符替换成字典中对应的值。
我想逐个字符地比较我的字典和字符串,当它们匹配时,就用字典中匹配的值来替换字符串中的字符。例如,如果字符串中有字母A,它会和字典中的A匹配,然后被替换成T,这个结果会写入文件line2_u_rev_comp。但是,出现了一个错误,提示KeyError: '\n'。这个错误是什么意思?我该怎么解决它呢?
REV_COMP = {
'A': 'T',
'T': 'A',
'C': 'G',
'G': 'C',
'N': 'N',
'U': 'A'
}
tbl = REV_COMP
line2_u_rev_comp = [tbl[k] for k in line2_u_rev[::-1]]
''.join(line2_u_rev_comp)
3 个回答
1
问题出在 tbl[k]
这部分,你没有检查这个键在字典里是否存在。如果不存在,你需要直接返回 k
本身。
另外,你还需要把列表再反转一次,因为你的循环语句是反向的。
试试这个代码:
line2_u_rev = "MY TEST IS THIS"
REV_COMP = {
'A': 'T',
'T': 'A',
'C': 'G',
'G': 'C',
'N': 'N',
'U': 'A'
}
tbl = REV_COMP
line2_u_rev_comp = [tbl[k] if k in tbl else k for k in line2_u_rev[::-1]][::-1]
print ''.join(line2_u_rev_comp)
输出:
MY AESA IS AHIS
2
line2_u_rev_comp = [tbl.get(k,k) ... ]
这段代码要么从字典里获取值,要么就返回它自己。
2
'\n'
代表换行符,也就是在文本中表示开始新的一行。如果你想去掉这个换行符(还有其他多余的空格),可以使用str.strip
这个方法。例如:
line2_u_rev_comp = [tbl[k] for k in line2_u_rev.strip()[::-1]]