Python - 將列表列表轉換為樹狀字典
給定一個巢狀列表,我們希望將其轉換為一個字典,其元素可以被視為樹形資料結構的一部分。在本文中,我們將看到將巢狀列表轉換為新增字典的兩種方法,其元素表示樹狀資料結構。
使用切片
我們透過切片反轉列表中的專案,然後檢查該專案是否在列表中存在。如果不存在,則忽略它,否則將其新增到樹中。
示例
def CreateTree(lst): new_tree = {} for list_item in lst: currTree = new_tree for key in list_item[::-1]: if key not in currTree: currTree[key] = {} currTree = currTree[key] return new_tree # Given list listA = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']] print(CreateTree(listA))
執行以上程式碼將得到以下結果:
輸出
{'X': {'Y': {}, 'Z': {'P': {}}}}
使用 reduce 和 getitem
我們使用 functools 和 operator 模組來獲取函式 reduce 和 getitem。使用這些函式,我們定義兩個函式來從列表中獲取專案並將專案設定到樹結構中。這裡我們也使用切片方法反轉列表的元素,然後應用兩個建立的函式來建立元素為樹結構的字典。
示例
from functools import reduce from operator import getitem def getTree(tree, mappings): return reduce(getitem, mappings, tree) def setTree(tree, mappings): getTree(tree, mappings[:-1])[mappings[-1]] = dict() # Given list lst = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']] tree = {} for i in lst: setTree(tree, i[::-1]) print(tree)
執行以上程式碼將得到以下結果:
輸出
{'X': {'Y': {}, 'Z': {'P': {}}}}
廣告