在Python字典中扫描两个单词短语

在Python字典中扫描两个单词短语,python,Python,我正在尝试使用Python dictionary对象来帮助将输入字符串转换为其他单词或短语。我成功地翻译了输入中的单个单词,但我似乎不知道如何翻译多个单词的短语 例如: sentence = input("Please enter a sentence: ") myDict = {"hello": "hi","mean adult":"grumpy elder", ...ect} 如果用户输入hello mean成人作为输入,我如何返回hi grumpy elder translation =

我正在尝试使用Python dictionary对象来帮助将输入字符串转换为其他单词或短语。我成功地翻译了输入中的单个单词,但我似乎不知道如何翻译多个单词的短语

例如:

sentence = input("Please enter a sentence: ")
myDict = {"hello": "hi","mean adult":"grumpy elder", ...ect}

如果用户输入
hello mean成人
作为输入,我如何返回
hi grumpy elder

translation = myDict['fast car']
特定问题的解决方案如下所示,
maxlen
是词典中单个短语的最大字数

translation = []

words = sentence.split(' ')
maxlen = 3
index = 0

while index < len(words):
    for i in range(maxlen, 0, -1):
        phrase = ' '.join(words[index:index+i])
        if phrase in myDict:
            translation.append(myDict[phrase])
            index += i
            break
    else:
        translation.append(words[index])
        index += 1

print ' '.join(translation)
translation=[]
单词=句子。拆分(“”)
maxlen=3
索引=0
而索引
给定一句话
你好这是一辆漂亮的快车
,它会输出
你好这是一辆甜蜜的快车

“快车”
是字典的一个键,因此如果您使用从字典返回的键,您可以提取值

如果您直接从用户那里获取输入并使用它引用字典,
get
更安全,因为它允许您在密钥不存在的情况下提供默认值

print(myDict.get(sentence, "Phrase not found"))
因为你已经澄清了你的需求,现在最困难的部分是拆分;
get
不会更改。如果你能保证句子的顺序和结构(也就是说,它的结构总是这样,我们有一个一个单词的短语,后面跟着一个两个单词的短语),那么只在第一次出现空格字符时分割

split_input = input.split(' ', 1)
print("{} {}".format(myDict.get(split_input[0]), myDict.get(split_input[1])))

更复杂的拆分需求我留给读者作为练习。提示是使用
myDict
键来确定句子中存在哪些有效标记。

这将检查每个单词,以及使用当前单词前后的单词组成的两个单词短语:

myDict = {"hello": "hi",
          "fast car": "quick ride"}
sentence = input("Please enter a sentence: ")
words = sentence.split()
for i, word in enumerate(words):
    if word in myDict:
        print myDict.get(word)
        continue
    if i:
        phrase = ' '.join([words[i-1], word])
        if phrase1 in myDict:
            print myDict.get(phrase)
            continue
    if i < len(words)-1:
        phrase = ' '.join([word, words[i+1])
        if phrase in myDict:
            print myDict.get(phrase)
            continue
myDict={“你好”:“你好”,
“快车”:“快车”}
句子=输入(“请输入句子:”)
单词=句子
对于i,枚举中的单词(单词):
如果myDict中有单词:
打印myDict.get(word)
持续
如果我:
短语=''。连接([单词[i-1],单词])
如果myDict中的短语1:
打印myDict.get(短语)
持续
如果我
它只适用于单字短语,因为我使用split()将输入拆分为一个单词列表方法。然后我一次处理列表中的一个元素,直到在myDict中找到匹配项。然后我返回结果值。如果使用
split
它们,请提出问题并添加此代码。但是为什么要首先拆分输入?我们应该如何破译什么应该是两个字的子字符串,三个字的子字符串..or一个单词子串,bruteforce每个组合?但他想在
句子中找到多个单词短语,而不是用整个句子作为键。“快车”充其量只是一个句子片段。此外,它也是访问他们想要的数据的关键,所以为什么他们不应该使用它?如果他们有比我在这里表达的更深的关注点,那么他们应该编辑他们的问题,指出这些。@chown是对的,这不是我需要的。我编辑了原始问题,希望它能让我更清楚谢谢!这正是我想要的!非常感谢。:)