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': {}}}}

更新於: 2020-12-28

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告