You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字典列表中筛选指定扩展名且处于最浅层级的文件路径

问题描述

给定如下字典列表:

data = [{'name': 'root/folder1/asd/file.csv'},
        {'name': 'root/folder1/bsd/file.csv'}, 
        {'name': 'root/folder1/folder2/folder3/new.csv'}, 
        {'name': 'root/folder1/folder2/folder3'}]

需要从中筛选出仅包含特定扩展名(.exe或.csv),且位于列表中最浅层级的文件。规则是:找到所有符合扩展名要求的路径中斜杠数量的最小值,只保留斜杠数等于该最小值的路径。

初始实现代码如下:

for path in data:
    if path.get('name').endswith('.exe') or path.endswith('.csv'):
       path_count = len(re.findall('/', path)) 
       path.update({'path_count': path_count})

希望得到更简洁的实现方式。

简洁实现方案

可以通过两步完成,无需多次循环,且用更高效的字符串方法替代正则统计斜杠数:

# 定义目标扩展名
target_extensions = ('.exe', '.csv')

# 第一步:筛选符合扩展名的路径,同时计算每个路径的斜杠数量
valid_paths = [
    (item['name'], item['name'].count('/')) 
    for item in data 
    if item['name'].endswith(target_extensions)
]

# 第二步:找到最小斜杠数,筛选出对应路径
if valid_paths:
    min_slash_count = min(cnt for _, cnt in valid_paths)
    result = [path for path, cnt in valid_paths if cnt == min_slash_count]
else:
    result = []

print(result)

说明

  1. 用str.count('/')替代正则re.findall统计斜杠数,代码更简洁且执行效率更高。
  2. 列表推导式一步完成筛选和计数,避免修改原字典结构。
  3. 通过生成器表达式快速定位最小斜杠数,再筛选出符合条件的路径,逻辑清晰且代码紧凑。

运行上述代码,输出结果为:

['root/folder1/asd/file.csv', 'root/folder1/bsd/file.csv']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:54:19