繁体   English   中英

给定一个长字符串,在字典中找到匹配的字符串

[英]Given a long string, find the matching strings in the dictionary

假设我们有一个字典,其键是食物名称。

用户可以输入一个食物名称字符串(即“香蕉酸奶牛排芝士蛋糕”),为了简单起见,我们假设所有内容都是小写的,并且没有食物名称在字符串中出现多次。

找出字典中的哪些键出现在食物名称字符串中的最有效方法是什么? 让我们假设可能根本没有键出现,也可能食物名称字符串仅由字典键组成。

这是为了自学。 使用Suffix Trie似乎是一个不错的选择,但我不确定如何优化它(因为在这种情况下可能有多个匹配项)如果有众所周知的定理或参考资料,我将不胜感激。

PS。 感谢您的回答,但唯一的问题是食物名称不需要长一个字 让我们想想这样的事情。

“淡咖啡冰淇淋”

它是 4 个字长的字符串,但只有 2 个食物名称:淡咖啡、冰淇淋

您可以为此目的使用设置交集

set(food_string.split()) & food_dict.keys()

请注意, dict.keys()虽然不是set ,但支持set API。

如果无法识别食物名称的明确边界(例如空格 ),那么您可以使用以下内容:

[k for k in food_dict if k in food_string]

这是你的意思吗?

dict = {
  "banana": "answer1",
  "steak": "answer1",
  "cheese": "answer1"
}
input = "banana yogurt steak cheese cake"
for word in input.split():
    print (word)
    if word in dict:
        print ("true")

Output:

banana
true
yogurt
steak
true
cheese
true
cake

如果不是一个字:

dict = {
  "banana milk shake": "answer1",
  "steak": "answer2",
  "ice cream": "answer3",
  "salad dressing": "answer4"
}
input = "banana milk shake yogurt steak cheese ice cream cake"
for key in dict:
    print (key)
    if key in input:
        print ("true")
    else:
        print ("false")

Output:

banana milk shake
true
steak
true
ice cream
true
salad dressing
false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM