例如,我有一个字典,我想使用字符串 "apple"
并返回字符串中每个给定字母的字典中的相应值:
'dot-dash-dot-dash-dash-dot-dot-dash-dash-dot-dot-dash-dot-dot-dot'
morse_dict = {
'a': 'dot-dash',
'b': 'dash-dot-dot-dot',
'c': 'dash-dot-dash-dot',
'd': 'dash-dot-dot',
'e': 'dot',
'f': 'dot-dot-dash-dot',
'g': 'dash-dash-dot',
'h': 'dot-dot-dot-dot',
'i': 'dot-dot',
'j': 'dot-dash-dash-dash',
'k': 'dash-dot-dash',
'l': 'dot-dash-dot-dot',
'm': 'dash-dash',
'n': 'dash-dot',
'o': 'dash-dash-dash',
'p': 'dot-dash-dash-dot',
'q': 'dash-dash-dot-dash',
'r': 'dot-dash-dot',
's': 'dot-dot-dot',
't': 'dash',
'u': 'dot-dot-dash',
'v': 'dot-dot-dot-dash',
'w': 'dot-dash-dash',
'y': 'dash-dot-dash-dash',
'z': 'dash-dash-dot-dot'
}
a = tuple("word")
for x in a:
return("-".join([val for keys, val in morse_dict.items() if x in keys]))
我在这里做错了什么?
答案 0 :(得分:3)
我不知道如何解释你到底做错了什么,因为你似乎让这变得不必要地复杂了。
标题问题的答案,
<块引用>如果给定的字符串与键匹配,如何返回键的值
是使用字典的基本特征,一个键查找:
>>> morse_dict = {'a': 'dot-dash', ...}
>>> morse_dict['a']
'dot-dash'
如果字典中不包含键,这将引发 KeyError
异常。为避免这种情况,您有两个选择:
.get
方法代替 []
查找,它允许指定默认值,如果键不存在,则返回该值。我认为在您的情况下,默认值无济于事,因为未知字母的莫尔斯电码是什么?如果您选择使用空字符串 ''
作为默认值,您最终会得到包含 --
的结果。
所以,当使用第一个选项时,你想做的事情可以简单地写成:
'-'.join(morse_dict[letter] for letter in word if letter in morse_dict)
即,对于单词中的每个字母,查找对应的莫尔斯电码(已经由dash
或dot
加入-
组成),并通过{{将它们全部加入1}},并忽略没有摩尔斯电码的字母。
答案 1 :(得分:1)
您可以简单地使用这样的列表推导式:
a = "word"
morse_a = "-".join([morse_dict[letter] for letter in a])
否则,我看到您测试字符以确定它们是否在 morse_dict
中。规划计划外字符的 Pythonic 方法可能是使用方法 dict.get()
:
a = "word"
morse_letters = [morse_dict.get(letter, None)] # Get dict values
morse_letters = tuple(filter(None, morse_letters)) # Filter None and cast into a tuple
morse_a = "-".join(morse_letters) # Join everything
答案 2 :(得分:0)
用你给定的字典试试下面的简单代码,它满足你的书面要求,
a = "word"
fin = []
for x in a.lower():
if x in morse_dict.keys():
fin.append(morse_dict[x])
print('-'.join(fin))
** 您可以根据您在函数中的要求将 print
替换为 return