最近在做一个django项目,里面有一个字典数据非常大,虽然已经做了分页处理。但是用户想要找到指定的数据,还得一页页翻,非常繁琐。
字典的结构如下:
file_dict = { "access.log": { "type": "dir", "size": "123", "name": "access.log", }, "access.log.gz": { "type": "dir", "size": "123", "name": "access.log", }, "error.log": { "type": "dir", "size": "123", "name": "access.log", }, "access-auth.log": { "type": "dir", "size": "123", "name": "access.log", }, }
当我输入关键字access时,需要出现3个结果。
[‘access-auth.log‘, ‘access.log‘, ‘access.log.gz‘]
完整代码如下:
test.py
import re file_dict = { "access.log": { "type": "dir", "size": "123", "name": "access.log", }, "access.log.gz": { "type": "dir", "size": "123", "name": "access.log", }, "error.log": { "type": "dir", "size": "123", "name": "access.log", }, "access-auth.log": { "type": "dir", "size": "123", "name": "access.log", }, } def fuzzy_finder(key, data): """ 模糊查找器 :param key: 关键字 :param data: 数据 :return: list """ # 结果列表 suggestions = [] # 非贪婪匹配,转换 ‘djm‘ 为 ‘d.*?j.*?m‘ pattern = ‘.*?‘.join(key) # 编译正则表达式 regex = re.compile(pattern) for item in data: # 检查当前项是否与regex匹配。 match = regex.search(item) if match: suggestions.append((len(match.group()), match.start(), item)) return [x for _, _, x in sorted(suggestions)] # 搜索关键字 keys = "access" result = fuzzy_finder(keys,file_dict) print(result)
执行输出:
[‘access-auth.log‘, ‘access.log‘, ‘access.log.gz‘]
通过正则中的非贪婪匹配,就可以实现这个效果了。
具体原理,请查看下面的参考链接。
本文参考链接:
https://www.cnblogs.com/weiman3389/p/6047017.html
原文:https://www.cnblogs.com/xiao987334176/p/12625157.html