比较python

时间:2017-10-03 06:51:43

标签: python

我有一个单词字典,其频率如下。

mydictionary = {'yummy tim tam':3, 'fresh milk':2, 'chocolates':5, 'biscuit pudding':3}

我有一组字符串如下。

recipes_book = "For today's lesson we will show you how to make biscuit pudding using 
yummy tim tam and fresh milk."

在上面的字符串中,我有字典中的“饼干布丁”,“美味的蒂姆塔姆”和“新鲜牛奶”。

我目前正在将字符串标记为识别字典中的单词,如下所示。

words = recipes_book.split()
for word in words:
    if word in mydictionary:
        print("Match Found!")

但它只适用于一个单词字典键。因此,我感兴趣的是以最快的方式(因为我的真实食谱是非常大的文本)来识别具有多个单词的字典键。请帮帮我。

3 个答案:

答案 0 :(得分:2)

构建你的正则表达式并编译它。

import re

mydictionary = {'yummy tim tam':3, 'fresh milk':2, 'chocolates':5, 'biscuit pudding':3}

searcher = re.compile("|".join(mydictionary.keys()), flags=re.I | re.S)

for match in searcher.findall(recipes_book):
    mydictionary[match] += 1

此后的输出

{'yummy tim tam': 4, 'biscuit pudding': 4, 'chocolates': 5, 'fresh milk': 3}

答案 1 :(得分:1)

根据一些测试," in"键盘工作比#34;更快。模块

What's a faster operation, re.match/search or str.find?

此处的空格没有问题。 假设mydictionary是静态的(预定义的),我认为你应该选择相反的事情:

for key in mydictionary.iterkeys():
    if key in recipes_book:
        print("Match Found!")
        mydictionary[key] += 1

在python2中,使用iterkeys你有一个迭代器,这是一个很好的做法。 使用python3,你可以直接在dict上循环。

答案 2 :(得分:0)

通过搜索要在大块str数据中找到的文本来尝试相反的方法。

import re
for item in mydictionary:
    match = re.search(item, recipes_book, flags=re.I | re.S)
    if match:
       start, end = match.span()
       print("Match found for %s between %d and %d character span" % (match.group(0), start, end))