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

2024-06-17 16:11:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我做错了什么


Tags: 字符串inappleformorsereturn字典字母
3条回答

使用满足您书面要求的给定词典尝试以下简单代码

a = "word"
fin = []
for x in a.lower():
    if x in morse_dict.keys():
        fin.append(morse_dict[x])
    
print('-'.join(fin))

**根据您在函数中的要求,您可以将print替换为return

我不知道如何解释你到底做错了什么,因为你似乎把事情弄得不必要的复杂

标题问题的答案

how to return the value of a key if a given string matches the key

是使用字典的基本功能,键查找:

>>> 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-连接而成),并通过-连接它们,忽略没有莫尔斯电码的字母

您可以简单地使用如下列表:

a = "word"
morse_a = "-".join([morse_dict[letter] for letter in a])

否则,我看到您测试字符以确定它们是否在morse_dict中。计划非计划字符的Python方法可以是使用方法^{}

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

相关问题 更多 >