list_a = ['/usr/bin/a.sh', '/usr/bin/b.sh', '/usr/c.sh', '/usr/d.sh', '/bin/a.sh', '/bin/b.sh', '/bin/test/a.sh', '/bin/test/c.sh']
===>
result = [['/usr/bin/a.sh', '/usr/bin/b.sh'], [ '/usr/c.sh', '/usr/d.sh'], ['/bin/a.sh', '/bin/b.sh'], ['/bin/test/a.sh', '/bin/test/c.sh']]
也就是把目录相同的文件路径归到一个子列表中,如何操作更高效啊,谢谢。
1
imn1 2020-08-27 16:22:02 +08:00
先订层级
/相同 15 层 /a /相同 15 层 /b/a 这两个算一类还是两类? |
2
BBrother 2020-08-27 16:27:14 +08:00
根据"/"切分,切出来的每一部分都是一个节点,以类似 trie 的思路建树,所有非叶子节点就是你要的子目录
|
3
ungrown 2020-08-27 16:29:57 +08:00
路径所有 part 全部割开,然后迭代放入多层级的字典
|
5
imn1 2020-08-27 16:33:17 +08:00
如果只计算 basename 和 dirname 就简单
dirs = {dirname(x) for x in list_a} result = [[x for x in list_a if x.startswith(y+'/')] for y in dirs] |