You need to enable JavaScript to run this app. Python如何高效筛选列表中键值匹配指定字符串的dict子集
优惠活动
大模型
产品
解决方案
定价
更多

Python如何高效筛选列表中键值匹配指定字符串的dict子集

问题修复与优化方案

问题根源

原代码使用in做子串匹配,会出现t1匹配到t100的错误,且每一轮筛选都全量遍历原始列表,存在冗余计算,效率较低。

优化思路

  1. 修正匹配规则:观察t字段格式为ab_<标识>_<后缀>,拆分字符串取中间段做精准相等匹配,避免子串匹配错误。
  2. 降低时间复杂度:先遍历一次原始列表做分组缓存,后续直接从缓存取对应分组处理,无需重复遍历全量数据,数据量越大性能优势越明显。

实现代码

from collections import defaultdict

nest_dict = [{'t': 'ab_t1_a', 'var': 1},
 {'t': 'ab_t2_b', 'var': 22},
 {'t': 'ab_t1_c', 'var': 3},
 {'t': 'ab_t1_d', 'var': 4},
 {'t': 'ab_t1_b', 'var': 2},
 {'t': 'ab_t2_a', 'var': 11},
 {'t': 'ab_t2_c', 'var': 33},
 {'t': 'ab_t2_d', 'var': 44},
 {'t': 'ab_t100_d', 'var': 100}]

list_val = ['t1','t2','t100']

# 仅遍历一次原始数据做分组
group_cache = defaultdict(list)
for item in nest_dict:
    t_tag = item['t'].split('_')[1]
    if t_tag in list_val:
        group_cache[t_tag].append(item)

# 按要求生成结果
all_data = []
for tag in list_val:
    # 直接用字符串排序即可,无需转list
    sorted_list = sorted(group_cache[tag], key=lambda d: d['t'])
    all_data.append([x['var'] for x in sorted_list])

运行后all_data的输出为[[1, 2, 3, 4], [11, 22, 33, 44], [100]],符合预期。

额外说明

如果t字段的格式不固定,可替换匹配逻辑为正则精准提取,示例如下:

import re
# 匹配_后接t加数字再接_的部分
pattern = re.compile(r'_(t\d+)_')
t_tag = pattern.search(item['t']).group(1)

内容的提问来源于stack exchange,提问作者rpb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:30:01