如何从带有条件的文件夹绝对名称中创建键值

问题描述

我的输出低于

它是一个生成输出(列表项)

for i in listoffiles:
    print (files)

输出

    test1/
    test1/Code.csv
    test2/
    test2/anomaly.csv
    test2/an.csv
    test3
    test4

当且仅当/之后的任何内容都需要生成字典时,您才能看到输出中没有键test3和test4

预期

{'test1' :'Code.csv','test2':['anomaly.csv','an.csv']}

解决方法

尝试一下

from collections import defaultdict

result = defaultdict(list)

for f in listoffiles:
    if "/" in f:
        split_ = f.split("/")

        # skip if leaf is empty
        if not split_[1]:
            continue

        result[split_[0]].append(split_[1])

itertools.groupby的帮助下的另一种解决方案,

from itertools import groupby

filter_ = filter(lambda x : "/" in x and x.split("/")[1],listoffiles)

print(
    {k : [vv.split("/")[1] for vv in v]
     for k,v in groupby(filter_,key=lambda x : x.split("/")[0])}
)

{'test1': ['Code.csv'],'test2': ['anomaly.csv','an.csv']}
,

以下为您工作吗?

import re
file_dict = {}

for file in listoffiles:
    m = re.search(r"(\S*)\/(\S*)",file).groups()

    if m is None:
        continue 
    
    dir_name,file_name = m.groups()
    if file_name == "":
        continue

    if not file_dict.get(dir_name):
        file_dict[dir_name] = file_name
    elif type(file_dict[dir_name]) == list:
        file_dict[dir_name].appendUfile_name
    else:
        file_dict[dir_name] = [file_dict[dir_name],file_name]