感谢您的快速反应。Stackoverflow太棒了!
我需要检查一个单词(或者更确切地说是数千个单词)是否与包含关键字的dict匹配。在
例如,假设我有一个字符串:"The fluffy fox jumped the friggin fence."
我需要对照关键字dict检查字符串中的每个单词,如果匹配,则返回所有值。在
我创建了一个dict filters
:(uniqueid
的意思是“lk2m3lk4m2”,其余的是“static”。)
filters:
{ "fox" : [
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' },
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' }
]},
{ "fence" : [
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' }
]}
…并计划对字符串中每个单词的过滤器进行迭代(我必须以每秒5000个单词的速度执行此操作。换句话说,绩效是最重要的问题。在
过滤关键字的数量可能会增加到数千个,而字符串永远不会超过一个正常的句子长度(即5-20个单词)。因此,我将遍历字符串中的每个单词,并检查它是否包含在过滤器列表中。然而,在500句/秒的速度下,我仍然需要大量的计算。在
例如,是否可以对列表进行排序(例如,dict在list中的键),从而显著提高性能?有没有我应该使用的C实现(比如我使用cjson获得了很好的性能增益)?在
很抱歉这个问题有些不稳定,但我该怎么做这个任务呢?在
编辑:
预期输入:"The fluffy fox jumped the friggin fence."
预期输出:{ 'subscription' : 'flskdmfslk32232', 'link' : 'sfdksmfls22323' },
{ 'subscription' : '3023940fsdf', 'link' : 'sdflsfm223' }
(即每个匹配关键字下列出的订阅)
您可以通过简单地filters.has_键(文字)或通过做:
或者:
^{pr2}$不需要迭代过滤器中的每个条目。相反,您需要拆分输入字符串,将每个单词添加到一个集合中(以消除重复),然后在集合上迭代以在过滤器字典中查找每个单词。在
在Python中最快的方法是使用字典查找句子中的每个单词,然后累加和关联的值。主数据结构可能如下所示:
使用这种方式(在8位字符上):
^{pr2}$或者,它可能会更快(是时候找出答案),这样可以避免双重字典查找:
不管怎样,这就是输出:
相关问题 更多 >
编程相关推荐