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

时间:2016-10-30 11:04:42

标签: python dictionary whitespace morse-code

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

我尝试添加三个空格作为字典的键,并且相应的值为一个空格,但它似乎不起作用。

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

我也尝试使用正则表达式分隔输入,但是我失败了。有没有办法让它使用词典?甚至可以在字典中使用空格作为键和输入吗?

2 个答案:

答案 0 :(得分:1)

str.split()在任意宽度的空格上拆分输入字符串。这意味着您只能获得非空格的字符串部分(其中空格包含空格)。

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

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

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

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

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

答案 1 :(得分:0)

函数split会将三个空格视为单个分隔符。因此,一种选择是首先在三重空间上明确分割,如@Martijn Pieters建议的那样,或者首先用摩尔斯电码中没有出现的其他东西替换三重空间(例如,可能是|),然后将其转换为空白:

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