[英]Python : Convert list of tuple to dict
我收到來自imap服務器的響應,如下所示。 其中包含特定用戶帳戶的所有文件夾。
imap.list_folders()
輸出:
[((b'\\HasChildren',), b'.', 'welcome'), ((b'\\HasChildren',), b'.', 'welcome.welcomeqqqqq'), ((b'\\HasNoChildren',), b'.', 'welcome.welcomeqqqqq.downunder'), ((b'\\HasNoChildren',), b'.', 'test2'), ((b'\\HasNoChildren',), b'.', 'Arunnnnnnnnn')]
welcome
是文件夾名稱。 HasChildren
表示文件夾中有一個孩子。 welcome.welcomeqqqqq
是welcome
的孩子。 父級和子級由點分隔。 我想從文件夾列表中遞歸地形成樹狀視圖格式。
預期產量:
[
{
"folder": "Top",
"parent": "None",
"children": [
{
"folder": "Folder 1",
"parent": "Top",
"children": [
{
"folder": "Sub Folder 1",
"parent": "Folder 1",
"children": []
},
{
"folder": "Sub Folder 2",
"parent": "Folder 1",
"children": [
{
"folder": "Sub Folder Sub Folder 1",
"parent": "Sub Folder 2",
"children": []
},
{
"folder": "Sub Folder Sub Folder 2",
"parent": "Sub Folder 2",
"children": []
}
]
}
]
},
{
"folder": "Folder 2",
"parent": "Top",
"children": []
}
]
}
]
任何幫助,將不勝感激。
您可以使用遞歸函數執行此操作:
folders = [
((b'\\HasChildren',), b'.', 'welcome'),
((b'\\HasChildren',), b'.', 'welcome.welcomeqqqqq'),
((b'\\HasNoChildren',), b'.', 'welcome.welcomeqqqqq.downunder'),
((b'\\HasNoChildren',), b'.', 'test2'),
((b'\\HasNoChildren',), b'.', 'Arunnnnnnnnn')
]
def make_my_list_of_dict(my_list_of_folders, check_parent = None):
my_list = []
for e in my_list_of_folders:
split_char = e[1].decode()
parent = e[2].split(split_char)[-2] if split_char in e[2] else None
folder = e[2].split(split_char)[-1]
if parent == check_parent:
if e[0][0] == b'\\HasChildren':
children = make_my_list_of_dict(my_list_of_folders, folder)
my_list.append({'folder':folder, 'parent':parent, 'children':children})
else:
my_list.append({'folder':folder, 'parent':parent, 'children':[]})
return my_list
result = make_my_list_of_dict(folders)
print(result)
輸出:
[
{'folder': 'welcome',
'parent': None,
'children': [
{'folder': 'welcomeqqqqq',
'parent': 'welcome',
'children': [
{'folder': 'downunder',
'parent': 'welcomeqqqqq',
'children': []
}
]
}
]
},
{'folder': 'test2',
'parent': None,
'children': []
},
{'folder': 'Arunnnnnnnnn',
'parent': None,
'children': []
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.