1

我有一个要与我的字符串进行比较的字典,对于字典中的每个 ke,它与字符串中的匹配我希望将字符串字符转换为字典的字符

我想逐个字符地将我的字典与我的字符串进行比较,当它们匹配时,将字符串字符替换为字典匹配的值,例如,如果 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)
4

3 回答 3

2
line2_u_rev_comp = [tbl.get(k,k)  ... ]

这将从字典中获取或返回自身

于 2014-05-08T14:32:35.760 回答
2

'\n'表示新行,您可以使用 摆脱它(和其他无关的空格)str.strip,例如:

line2_u_rev_comp = [tbl[k] for k in line2_u_rev.strip()[::-1]]
于 2014-05-08T14:32:38.517 回答
1

问题是,tbl[k]但您不检查字典中是否存在密钥,如果不存在,则需要k自行返回。

您还需要再次反转列表,因为您的 for 语句已反转。

试试这个代码:

    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)

输出:

我的 AESA 是 AHIS

于 2014-05-08T14:36:07.113 回答