zoukankan      html  css  js  c++  java
  • Python 代码实现模糊查询

    一、概述

    最近在做一个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)
    View Code

    执行输出:

    [{'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

  • 相关阅读:
    Linux下服务器开发的必要准备
    send()/ recv() 和 write()/ read()
    listen( ) accept( )
    sock( ) bind( ) connect( )
    SRCNN 卷积神经网络
    猫狗大战
    socket相关函数
    TCP详解
    【Dijkstra priority!】分层图
    树状数组
  • 原文地址:https://www.cnblogs.com/xiao987334176/p/12625157.html
Copyright © 2011-2022 走看看