Python字典如何实现非精确匹配?类似SQL LIKE的查询方法
Python实现字典键的模糊匹配(类似SQL LIKE)
方法1:遍历字典匹配前缀
直接遍历字典的键,用startswith()判断是否匹配目标前缀,适合规模较小的字典。
test_dict = {'EU6XNAS': '23TEST1'} def get_value_by_prefix(d, prefix): for key, val in d.items(): if key.startswith(prefix): return val return None # 测试前缀查询 print(get_value_by_prefix(test_dict, 'EU6')) # 输出:23TEST1
如果存在多个键匹配同一前缀,这个函数会返回第一个匹配的值;若需要所有匹配结果,可改为收集到列表中返回。
方法2:预构建前缀映射字典
如果字典规模大、查询频繁,提前构建前缀到值的映射字典,能实现O(1)时间复杂度的查询,代价是占用更多内存。
test_dict = {'EU6XNAS': '23TEST1'} prefix_map = {} for key, val in test_dict.items(): # 为每个键生成所有可能的前缀并映射到对应值 for i in range(1, len(key)+1): prefix = key[:i] prefix_map[prefix] = val # 重复前缀会被后续值覆盖 # 直接通过前缀查询 print(prefix_map.get('EU6')) # 输出:23TEST1
方法3:正则表达式实现复杂模糊匹配
如果需要更灵活的匹配规则(比如包含特定字符、后缀匹配等),可以用正则表达式,适配类似SQL LIKE的多种模糊场景。
import re test_dict = {'EU6XNAS': '23TEST1'} def get_value_by_regex(d, pattern): match_regex = re.compile(pattern) for key, val in d.items(): if match_regex.match(key): return val return None # 匹配以EU6开头的键(对应SQL LIKE 'EU6%') print(get_value_by_regex(test_dict, r'^EU6')) # 输出:23TEST1
你可以根据需求调整正则表达式,比如用r'.*EU6.*'匹配包含EU6的键,对应SQL LIKE '%EU6%'。
内容的提问来源于stack exchange,提问作者user3420305
相关产品推荐
相关产品推荐

