KeyError: '\n' python 2.7.5

1 投票
3 回答
5640 浏览
提问于 2025-04-18 05:50

我有一个字典,我想把它和我的字符串进行比较。对于字典中的每一个键,如果它和字符串中的某个字符匹配,我希望把这个字符替换成字典中对应的值。

我想逐个字符地比较我的字典和字符串,当它们匹配时,就用字典中匹配的值来替换字符串中的字符。例如,如果字符串中有字母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]]

撰写回答