首页 > 解决方案 > 如果给定的字符串与字典中的键匹配,如何返回键的值

问题描述

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

我在这里做错了什么?

标签: pythonpython-3.x

解决方案


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

标题问题的答案,

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

就是利用字典的基本特性,一键查找:

>>> 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连接-),然后将它们全部连接起来-,并忽略没有莫尔斯电码的字母。


推荐阅读