knu*_*ole 5 python performance search
感谢您惊人的快速反应.Stackoverflow太棒了!
我需要检查一个单词(或者更确切地说是数千个)是否与包含关键字的dict相匹配.
例如,假设我有一个字符串:"The fluffy fox jumped the friggin fence." 我需要根据关键字的dict检查字符串的每个单词,如果匹配,则返回所有值.
我创建了一个字典filters:( uniqueid表示即"lk2m3lk4m2",休息是'静态'.)
filters:
{ "fox" : [
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' },
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' }
]},
{ "fence" : [
{ 'subscription' : 'uniqueid', 'link' : 'uniqueid' }
]}
Run Code Online (Sandbox Code Playgroud)
...并计划迭代字符串中每个单词的过滤器(我必须以大约5000字/秒的速度执行此操作.换句话说,性能是问题所有.
过滤关键字的数量可能会增加到数千,而字符串永远不会超过正常的句子长(即5-20个字).因此,我将迭代字符串中的每个单词,并检查它是否包含在filter-list中.然而,在500句/秒,我仍然在看很多计算.
例如,是否可以对列表进行排序(即列表中的dict键),从而大幅提高性能?是否有我应该使用的C实现(就像我使用cjson具有很好的性能提升)?
对不起有点流动的问题 - 但我应该怎么做这个任务?
编辑:
预期输入:
"The fluffy fox jumped the friggin fence."
预期输出:( { 'subscription' : 'flskdmfslk32232', 'link' : 'sfdksmfls22323' },
{ 'subscription' : '3023940fsdf', 'link' : 'sdflsfm223' }
即每个匹配关键字下列出的订阅.)
您可以通过简单地执行filters.has_key(word) 或执行以下操作来确定某个单词是否是过滤器中的键:
subscriptions = filters.get(word)
if subscriptions is not None:
pass # TODO do something with subscriptions
Run Code Online (Sandbox Code Playgroud)
或者:
try:
subscriptions = filters[word]
# TODO do something with subscriptions
except:
pass # probably don't need to do anything if not present
Run Code Online (Sandbox Code Playgroud)
没有必要迭代过滤器中的每个条目。相反,您需要拆分输入字符串,将每个单词添加到集合中(以消除重复项),然后迭代集合以在过滤器字典中查找每个单词。