一、概述
最近在做一個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'}]
複制
本文參考連結:
https://www.cnblogs.com/weiman3389/p/6047017.html