gpt4 book ai didi

python - 在 Python 中有效地匹配字典的正则表达式

转载 作者:行者123 更新时间:2023-12-05 09:20:14 25 4
gpt4 key购买 nike

我的 Python 脚本中有一个单词字典:计数对。从这本字典中,我想提取与字符串列表中的任何项目匹配的条目。

我找到了一个使用正则表达式的有效解决方案(见下文),但它需要永远(运行约 10 小时)。我觉得必须有一种更快的方法来做到这一点 - 你们对如何改进我的代码有任何意见/想法吗?

import re

dicti={'the':20, 'a':10, 'over':2}
regex_list=['the', 'an?']

extractddicti= {k:v for k,v in dicti.items() if any (re.match("^"+regex+"$",k) for regex in regex_list)}

实际上,字典有大约 60,000 个条目,regex_list 大约有 1,000 个。正则表达式列表中的项目是正则表达式字符串,即包含特殊字符,如 ?,圆括号,如 (a|b|c) 等。它们可能匹配中的多个条目字典。

更新/编辑

(请参阅接受的答案以更好地实现相同的想法)

按照 Keozon 和其他人的建议,我首先像这样编译我的正则表达式:

regex_list=['the', 'an?']
regex_list_compiled=[re.compile("^"+i+"$") for i in regex_list]

然后稍微调整我的搜索功能:

extractddicti= {k:v for k,v in dicti.items() if any (re.match(regex,k) for regex in regex_list_compiled)} 

性能差异相当惊人:在没有编译的情况下,使用包含 14800 个项目的字典和 1,100 个正则表达式的列表进行测试运行需要 34 分钟,编译时略少于一(!)分钟。没想到会这么戏剧化。感谢您的帮助!

最佳答案

编译正则表达式一次而不是每次使用它们可能会给您带来相当多的性能改进。所以你会有类似的东西:

import re

dicti={'the':20, 'a':10, 'over':2}
patterns=['the', 'an?']
regex_matches = [re.compile("^"+pattern+"$").match for pattern in patterns]

extractddicti= {k:v for k,v in dicti.items()
if any (regex_match(k) for regex_match in regex_matches)}

关于python - 在 Python 中有效地匹配字典的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38460918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com