一、概述
最近在做一個django項目,里面有一個字典數據非常大,雖然已經做了分頁處理。但是用戶想要找到指定的數據,還得一頁頁翻,非常繁瑣。
字典的結構如下:
file_list = [ { "type": "dir", "size": "123", "name": "access.log", }, { "type": "dir", "size": "123", "name": "access.log.gz", }, { "type": "dir", "size": "123", "name": "error.log", }, { "type": "dir", "size": "123", "name": "access-auth.log", }, ]
當我輸入關鍵字access時,需要出現3個結果。
['access-auth.log', 'access.log', 'access.log.gz']
二、代碼實現
完整代碼如下:
test.py

import re file_list = [ { "type": "dir", "size": "123", "name": "access.log", }, { "type": "dir", "size": "123", "name": "access.log.gz", }, { "type": "dir", "size": "123", "name": "error.log", }, { "type": "dir", "size": "123", "name": "access-auth.log", }, ] def fuzzy_finder(key, data): """ 模糊查找器 :param key: 關鍵字 :param data: 數據 :return: list """ # 結果列表 suggestions = [] # 非貪婪匹配,轉換 'djm' 為 'd.*?j.*?m' # pattern = '.*?'.join(key) pattern = '.*%s.*'%(key) # print("pattern",pattern) # 編譯正則表達式 regex = re.compile(pattern) for item in data: # print("item",item['name']) # 檢查當前項是否與regex匹配。 match = regex.search(item['name']) if match: # 如果匹配,就添加到列表中 suggestions.append(item) return suggestions # 搜索關鍵字 keys = "access" result = fuzzy_finder(keys,file_list) print(result)
執行輸出:
[{'type': 'dir', 'size': '123', 'name': 'access.log'}, {'type': 'dir', 'size': '123', 'name': 'access.log.gz'}, {'type': 'dir', 'size': '123', 'name': 'access-auth.log'}]
本文參考鏈接: