空白字符作为字典中的键和值

Whitespace characters as both a key and a value in a dictionary

我想将整个句子从摩尔斯电码解码为普通字母 - 我的脚本就是这样做的,但它连接了所有单词 - 它不保留 spaces。在 morseCode(输入)中,三个 space 表示单词之间的分隔,而一个 space 表示字母之间的分隔。

我尝试在字典中添加三个 space 作为键,相应的值是一个 space,但它似乎不起作用。

def decodeMorse(morseCode):
    MORSE_CODE['   '] = ' '
    return ''.join(MORSE_CODE.get(i) for i in morseCode.split())

我也尝试过使用正则表达式来分隔输入,但我失败了。有没有办法使用字典使其工作?甚至可以使用 whitespaces 作为字典中的键和输入吗?

str.split() 在任意宽度的白色 space 上拆分输入字符串。这意味着您只能得到字符串中 not whitespace 的那些部分(其中 whitespace 包含 spaces)。

您通常会将输入拆分两次;一旦在字符串 ' ' 上得到一个单词列表,然后在 whitespace 上的每个单词只得到字母:

def decodeMorse(morseCode):
    return ' '.join([
        ''.join([MORSE_CODE.get(i) for i in word.split()])
        for word in morseCode.split('   ')])

如果你想使用你的方法,你必须使用正则表达式来拆分 并包含 3-space 分隔符:

re.split(r'([ ]{3}| )', morseCode)

但是你必须过滤掉单个 space 字母分隔符,因为 re.split() 可以包含或不包含整个拆分操作的分隔符,而不是单个分隔符标记.

函数split会将三重白色space视为单个分隔符。因此,一种选择是首先明确地拆分三元组 space,正如@Martijn Pieters 所建议的那样,或者首先将三元组 space 替换为摩尔斯电码中没有出现的其他内容(例如,可能 |) 然后将其翻译成白色space:

def decodeMorse(morseCode):
    MORSE_CODE['|'] = ' '
    return ''.join(MORSE_CODE.get(i) for i in morseCode.replace('   ', '|').split())