如何按父文件夹对路径列表进行动态分组?
动态按所属文件夹分组路径列表
给定如下路径列表,需要根据路径中的目标文件夹(如tent1、tent2)将路径自动分组到对应的子列表中,无需硬编码文件夹名称:
paths = [ '/var/lib/cons/states/tent1/tops-ok_2022_11_28', '/var/lib/cons/states/tent1/tops-ok_2022_11_27', '/var/lib/cons/states/tent2/tops-ok_2022_11_28', '/var/lib/cons/states/tent2/tops-ok_2022_11_27', '/var/lib/cons/states/tent3/tops-ok_2022_11_28', '/var/lib/cons/states/tent3/tops-ok_2022_11_27', '/var/lib/cons/states/tent4/tops-ok_2022_11_28', '/var/lib/cons/states/tent4/tops-ok_2022_11_27', ]
解决方案
可以通过字典动态分组:提取每个路径中的目标文件夹名称作为键,将对应路径存入值列表中,最后将字典的值转换为列表即可得到结果。
方法一:使用defaultdict简化代码
from collections import defaultdict grouped = defaultdict(list) for path in paths: # 拆分路径,取倒数第二个部分作为目标文件夹名 folder = path.split('/')[-2] grouped[folder].append(path) result = list(grouped.values())
方法二:普通字典实现(无需额外模块)
grouped = {} for path in paths: folder = path.split('/')[-2] if folder not in grouped: grouped[folder] = [] grouped[folder].append(path) result = list(grouped.values())
最终结果
运行上述代码后,result的值与期望一致:
[['/var/lib/cons/states/tent1/tops-ok_2022_11_28', '/var/lib/cons/states/tent1/tops-ok_2022_11_27'], ['/var/lib/cons/states/tent2/tops-ok_2022_11_28', '/var/lib/cons/states/tent2/tops-ok_2022_11_27'], ['/var/lib/cons/states/tent3/tops-ok_2022_11_28', '/var/lib/cons/states/tent3/tops-ok_2022_11_27'], ['/var/lib/cons/states/tent4/tops-ok_2022_11_28', '/var/lib/cons/states/tent4/tops-ok_2022_11_27']]
内容的提问来源于stack exchange,提问作者dean89
相关产品推荐
相关产品推荐

