如果给定的字符串与字典中的键匹配,如何返回键的值

时间:2021-06-16 20:21:33

标签: python python-3.x

例如,我有一个字典,我想使用字符串 "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]))

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

我不知道如何解释你到底做错了什么,因为你似乎让这变得不必要地复杂了。

标题问题的答案,

<块引用>

如果给定的字符串与键匹配,如何返回键的值

是使用字典的基本特征,一个键查找:

>>> morse_dict = {'a': 'dot-dash', ...}
>>> morse_dict['a']
'dot-dash'

如果字典中不包含键,这将引发 KeyError 异常。为避免这种情况,您有两个选择:

  1. 在尝试访问之前检查该键是否在字典中
  2. 使用 .get 方法代替 [] 查找,它允许指定默认值,如果键不存在,则返回该值。

我认为在您的情况下,默认值无济于事,因为未知字母的莫尔斯电码是什么?如果您选择使用空字符串 '' 作为默认值,您最终会得到包含 -- 的结果。

所以,当使用第一个选项时,你想做的事情可以简单地写成:

'-'.join(morse_dict[letter] for letter in word if letter in morse_dict)

即,对于单词中的每个字母,查找对应的莫尔斯电码(已经由dashdot加入-组成),并通过{{将它们全部加入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