簡體   English   中英

Python:將元組列表轉換為dict

[英]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.welcomeqqqqqwelcome的孩子。 父級和子級由點分隔。 我想從文件夾列表中遞歸地形成樹狀視圖格式。

預期產量:

[
    {
        "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM