С небольшими изменениями рецепт ActiveState Python Создать вложенный словарь из os.walk можно сделать так, как вы хотите:
try:
reduce
except NameError: # Python 3
from functools import reduce
import os
def count_files_in_directories(rootdir):
""" Creates a nested dictionary that represents the folder structure
of rootdir with a count of files in the lower subdirectories.
"""
dir = {}
rootdir = rootdir.rstrip(os.sep)
start = rootdir.rfind(os.sep) + 1
for path, dirs, files in os.walk(rootdir):
folders = path[start:].split(os.sep)
subdir = len(files) if files else dict.fromkeys(files)
parent = reduce(dict.get, folders[:-1], dir)
parent[folders[-1]] = subdir
return list(dir.values())[0]
startdir = "./sample"
res = count_files_in_directories(startdir)
print(res) # -> {'Employee A': {'Feb': 2, 'Jan': 3}, 'Employee B': {'Feb': 1, 'Jan': 2}}
Обратите внимание, что каталог ./sample
является корневым каталогом структуры папок, которую я создал для тестирования, точно так же, как показано в вашем вопросе.