【问题标题】:KeyError: '\n' python 2.7.5KeyError: '\n' python 2.7.5
【发布时间】:2014-05-08 14:30:45
【问题描述】:

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

我想逐个字符地将我的字典与我的字符串进行比较,当它们匹配时,将字符串字符替换为字典匹配的值,例如如果 A 在字符串中,它将与字典中的 A 匹配并替换为写入文件 line2_u_rev_comp 的 T。但是,会发生错误 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)

【问题讨论】:

  • 能把line2_u_rev的内容发一下吗?
  • 内容将是“ATATAGCGCGATAGAGCTCTAGAGNAUATATAGAGCNAUAUANA”

标签: python python-2.7 dictionary keyerror


【解决方案1】:

'\n' 表示换行,你可以使用str.strip 去掉它(和其他无关的空格),例如:

line2_u_rev_comp = [tbl[k] for k in line2_u_rev.strip()[::-1]]

【讨论】:

  • 呸,我没认出它是 DNA 序列...我以为他正在尝试做某种手动 str.translate(+1 表示他不需要字典中的字符以外的任何字符)
  • @JoranBeasley 你的解决方案通常是更好的解决方案,但如果你不也剥离你最终会在每行的开头换行!
  • 感谢您的解决方案
【解决方案2】:
line2_u_rev_comp = [tbl.get(k,k)  ... ]

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

【讨论】:

    【解决方案3】:

    问题出在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

    【讨论】:

    • 只有能清楚地解释问题并做 OP 可能想要的答案,即维护字典中没有的字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2020-12-17
    • 1970-01-01
    • 2015-04-12
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多