python создать словарь требуемого вида
Помогите написать функцию или модифицировать имеющyюся функию чтоб создать словарь согласно классу.
Должен создаться следующий словарь.
{folder1.arg: {file2.arg: None, file3.arg: None}, folder2.arg: {file4.arg: None}, folder3.arg: {folder4.arg: {file5.arg: None}}, file1.arg: None}
Код программы.
class file_system(object):
def __init__(self, arg):
super(file_system, self).__init__()
self.arg = arg
self.inside = None
self.root = False
computer_1 = file_system("computer_1")
computer_1.root = True
folder1 = file_system("folder1")
folder2 = file_system("folder2")
folder3 = file_system("folder3")
folder4 = file_system("folder4")
file1 = file_system("file1")
file2 = file_system("file2")
file3 = file_system("file3")
file4 = file_system("file4")
file5 = file_system("file5")
computer_1.inside = folder1, folder2, folder3, file1
folder1.inside = file2, file3
folder2.inside = file4
folder3.inside = folder4
folder4.inside = file5
def tree(value, tab=" "):
if value.root is True:
print(value.arg)
if value.inside is not None:
if type(value.inside) == tuple:
for item in value.inside:
print(tab, item.arg, sep="")
tree(item, tab=tab + " ")
else:
print(tab, value.inside.arg, sep="")
if value.inside.inside is not None:
tree(value.inside, tab=tab + " ")
else:
return
tree(computer_1)
Ответы (1 шт):
Автор решения: FotonPC
→ Ссылка
Как вам такая реализация:
class file_system(object):
def __init__(self, arg):
super(file_system, self).__init__()
self.arg = arg
self.inside = None
computer_1 = file_system("computer_1")
folder1 = file_system("folder1")
folder2 = file_system("folder2")
folder3 = file_system("folder3")
folder4 = file_system("folder4")
file1 = file_system("file1")
file2 = file_system("file2")
file3 = file_system("file3")
file4 = file_system("file4")
file5 = file_system("file5")
computer_1.inside = [folder1, folder2, folder3, file1]
folder1.inside = [file2, file3]
folder2.inside = [file4]
folder3.inside = [folder4]
folder4.inside = [file5]
def tree(value, tab=" "):
if value.inside:
return {value.arg : [tree(inside) for inside in value.inside]}
else:
return {value.arg : None}
print(tree(computer_1))
Правда там в качестве значение на свойство делается список.
Кстати None - это логически отрицательная величина, поэтому не надо писать: if value.inside is not None: