问题描述
我的输出低于
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]