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

时间:2015-04-25 15:38:10

标签: python

我正在尝试使用Python字典对象来帮助将输入字符串转换为其他单词或短语。我在翻译输入中的单个单词方面取得了成功,但我似乎无法弄清楚如何翻译多个单词短语。

示例:

Could not translate expression 'value(MyProjectWeb.Models.MyProjectDataContext).myDbFunction().Select(a => new MainReportModel() {Id = a.id, Lastname = a.nom, Firstname = a.prenom, Average = a.moyenne, Result = IIF(TryParse(a.moyenne.Trim(), Number, Invoke(value(System.Func`1[System.Globalization.CultureInfo])), Invoke(value(System.Func`1[System.Double]))), IIF((Parse(a.moyenne.Trim(), Number, Invoke(value(System.Func`1[System.Globalization.CultureInfo]))) < 4), Invoke(value(System.Func`1[System.String])), "success"), ((a.moyenne) + "</span>"))})' into SQL and could not treat it as a local expression.

如果用户输入sentence = input("Please enter a sentence: ") myDict = {"hello": "hi","mean adult":"grumpy elder", ...ect} 作为输入,我该如何返回hi grumpy elder

3 个答案:

答案 0 :(得分:2)

"fast car"是字典的关键字,因此如果您使用从中返回的密钥,则可以提取该值。

如果您从用户那里直接输入 并使用它来引用字典,get更安全,因为它允许您提供默认值以防密钥不存在。

print(myDict.get(sentence, "Phrase not found"))

由于你已经澄清了你的要求,现在困难的部分是分裂; get不会改变。如果你可以保证句子的顺序和结构(也就是说,它总是被构造成我们有一个带有1个单词的短语,后跟带有2个单词的短语),那么只在第一次出现的空格字符时进行分割

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

我将更复杂的分割要求作为练习留给读者。提示是使用myDict的键来确定句子中存在哪些有效令牌。

答案 1 :(得分:1)

和平常一样。

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)

鉴于句子hello this is a nice fast car,它会输出hi this is a sweet quick ride

答案 2 :(得分:0)

这将检查每个单词以及使用当前单词之前和之后的单词生成短语的双字短语:

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