迭代字典并返回相应的字符串

时间:2015-07-09 13:35:38

标签: python

问题在于:

morsecode = {'a':".-", 'b':"-...", 'c':"-.-.", 'd':"-..", \
'e':".", 'f':"..-.", 'g':"--.", 'h':"....", 'i':"..", \
'j':".---", 'k':"-.-", 'l':".-..", 'm':"--", \
'n':"-.", 'o':"---", 'p':".--.", 'q':"--.-", \
'r':".-.", 's':"...", 't':"-", 'u':"..-", 'v':"...-", \
'w':".--", 'x':"-..-", 'y':"-.--", 'z':"--.."}


def morse(mystring):
    output=""

    for key, code in morsecode.items():
        for item in mystring:
            if key==item:
                output+=code

    return output

我想得到这样的东西:

>>> morse("a boy")

' .- -... --- -.--'

但我只能得到:

>>> morse("a boy")

' -. --- ....- ---'

即使我输入" yob a"

,结果也是一样的

4 个答案:

答案 0 :(得分:9)

您可以使用join和生成器表达式

def morse(s):
    return ''.join(morsecode.get(i, i) for i in s)

这将替换所有字母,但会保留空格字符。

<强>详情

join采用str序列并将它们连接成一个字符串。

语法(something for something in sequence)称为“generator expression”。它是一个紧凑的1行,相当于for循环。您还应该研究“列表理解”,因为这是一种非常相似的技术,但是创建了一个列表而不是生成器。

get是从dict而不是[]查找密钥的更安全的替代方法,因为如果该密钥不存在,它将不会抛出异常。它将返回None或您传入的第二个参数。

答案 1 :(得分:2)

您需要对输入字符串进行迭代,然后将键(char)的相应值附加到变量(以下示例中为f)。

def morse(s):
    morsecode = {'a':".-", 'b':"-...", 'c':"-.-.", 'd':"-..", \
    'e':".", 'f':"..-.", 'g':"--.", 'h':"....", 'i':"..", \
    'j':".---", 'k':"-.-", 'l':".-..", 'm':"--", \
    'n':"-.", 'o':"---", 'p':".--.", 'q':"--.-", \
     'r':".-.", 's':"...", 't':"-", 'u':"..-", 'v':"...-", \
     'w':".--", 'x':"-..-", 'y':"-.--", 'z':"--.."}

    f = ""
    for i in s:
        if not i == ' ':
            f += morsecode[i]
        else:
            f += ' '

    return f

答案 2 :(得分:1)

问题在于您首先在字典上进行迭代,因此您要将在字符串中找到的任何内容的转换添加到输出变量中,该变量的顺序不正确。

你可以尝试 -

morsecode = {'a':".-", 'b':"-...", 'c':"-.-.", 'd':"-..", \
'e':".", 'f':"..-.", 'g':"--.", 'h':"....", 'i':"..", \
'j':".---", 'k':"-.-", 'l':".-..", 'm':"--", \
'n':"-.", 'o':"---", 'p':".--.", 'q':"--.-", \
'r':".-.", 's':"...", 't':"-", 'u':"..-", 'v':"...-", \
'w':".--", 'x':"-..-", 'y':"-.--", 'z':"--.."}

def morse(s):
    outputs = ''
    for item in s:
            outputs += morsecode.get(item,item)
    return outputs

答案 3 :(得分:0)

试试这个

morsecode = {'a':".-", 'b':"-...", 'c':"-.-.", 'd':"-..", \
'e':".", 'f':"..-.", 'g':"--.", 'h':"....", 'i':"..", \
'j':".---", 'k':"-.-", 'l':".-..", 'm':"--", \
'n':"-.", 'o':"---", 'p':".--.", 'q':"--.-", \
'r':".-.", 's':"...", 't':"-", 'u':"..-", 'v':"...-", \
'w':".--", 'x':"-..-", 'y':"-.--", 'z':"--.."}


def morse(mystring):
    output=""
    for item in mystring:
        if item in morsecode.keys():
            output+=morsecode[item]
    return output