Skip to main content
 首页 » 编程设计

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

2025年05月04日20cmt

问题是:

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”,结果也是一样的

请您参考如下方法:

您可以使用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,要么返回您传入的第二个参数。