Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定一个长字符串,在字典中查找匹配的字符串_Python_String_Dictionary_Trie - Fatal编程技术网

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

Python 给定一个长字符串,在字典中查找匹配的字符串,python,string,dictionary,trie,Python,String,Dictionary,Trie,让我们假设我们有一本字典,它的键是食物的名字 用户可以输入食物名称字符串(即“香蕉酸奶牛排奶酪蛋糕”),为了简单起见,我们假设所有内容都是小写,并且没有食物名称在字符串中出现多次 找出字典中哪些键出现在食物名称字符串中的最有效方法是什么?让我们假设可能根本并没有键出现,也可能食物名称字符串只包含字典键 这是为了自学。使用后缀Trie似乎是一个不错的选择,但我不确定如何优化它(因为在这种情况下可能有多个匹配项)。如果有关于它的著名定理或参考文献,我将非常感激 附言:谢谢你的回答,但唯一的问题是食品

让我们假设我们有一本字典,它的键是食物的名字

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

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

这是为了自学。使用后缀Trie似乎是一个不错的选择,但我不确定如何优化它(因为在这种情况下可能有多个匹配项)。如果有关于它的著名定理或参考文献,我将非常感激


附言:谢谢你的回答,但唯一的问题是食品名称不需要一个单词长。让我们想想这样的事情

“淡咖啡冰淇淋”

这是一个4字长的字符串,但只有两个食物名称:淡咖啡、冰淇淋您可以使用:

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")
输出:

banana
true
yogurt
steak
true
cheese
true
cake
banana milk shake
true
steak
true
ice cream
true
salad dressing
false
如果不是一个词:

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")
输出:

banana
true
yogurt
steak
true
cheese
true
cake
banana milk shake
true
steak
true
ice cream
true
salad dressing
false

这本字典的键是键。价值观是什么?如果它们不重要,你真的需要一本字典吗?或者它是一套吗?@MAK值不重要。这可能是一个非常感谢你的回答,但唯一的问题是食物名称不需要一个单词长。让我们想想这样的事情。“淡咖啡冰淇淋”是4个单词长的字符串,但只有2个食物名称:淡咖啡、冰淇淋谢谢你的回答,但唯一的问题是食物名称不需要一个单词长。让我们想想这样的事情。“淡咖啡冰淇淋”是4个单词长的字符串,但只有2个食物名称:淡咖啡,冰淇淋不知何故,你需要一个参考。我假设您的键是正确的值。换个方向走。如果您仍然想使用方法1。请另列一份清单作为参考。检查我的编辑。