簡體   English   中英

Python:從給定的數組/列表創建樹結構

[英]Python: create tree structure from given array/list

我最終遇到了問題。

假設我有一個給定的數組,或 4 個單獨的列表(列)

P1 L1 V1 O1

P1 L1 V1 O2

P1 L1 V2 O1 

P1 L1 V3 O3

P2 L1 V2 O1
 
P2 L2 V1 O2

P2 L3 V4 O2

我想將其轉換為 python 樹結構:

P1|

  |L1|

     |V1|

     |   |O1

     |   |O2

     |   |O3

     |V2|

     |  |O1

     |V3|

        |O3

P2|

  |L1|V2|O1

  |L2|V1|O2

  |L3|V4|O2

好的,這個給定的數組可以根據用戶輸入而改變,它總是具有這種“結構”,但它不是先驗定義的。

我的目標是定義這樣一個結構,並有可能在最低級別了解給定孩子的所有父母。

總而言之,按照@trincot 的建議,我輸入了一個輸入/輸出數據類型:

Input: 4 lists, example:
['P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P1', 'P2', 'P2', 'P2', 'P2', 'P2', 'P2', 'P2', 'P2', 'P2', 'P2']

output: One tree structure like this:
{'P1': {'L1': {'V1': {'O1': 'O1'}}, 'L2': {'V2': {'O2': 'O2'}, 'V1': {'O1': 'O1'}}}, 'P2': {'L1': {'V1': {'O1': 'O1'}}, 'L2': {'V2': {'O2': 'O2'}, 'V1': {'O1': 'O1'}}}}

在輸出中,我希望在最后一級知道元素是什么,並知道該元素的所有父元素。

當然,如果另一種數據類型更合適,我將不勝感激。

謝謝你的幫助!

我沒有看到示例輸入和示例輸出之間的聯系,因此我將猜測您想要什么。

這是一個實現:

# sample input
data = [
    ['P1', 'P1', 'P1', 'P1', 'P2', 'P2', 'P2'],
    ['L1', 'L1', 'L1', 'L1', 'L1', 'L2', 'L3'],
    ['V1', 'V1', 'V2', 'V3', 'V2', 'V1', 'V4'],
    ['O1', 'O2', 'O1', 'O3', 'O1', 'O2', 'O2']
]

forest = {}
for *path, last in zip(*data):
    node = tree
    for code in path:
        node = node.setdefault(code, {})
    node[last] = last

運行此代碼后, forest將是以下嵌套字典:

{
  "P1": {
    "L1": {
      "V1": {
        "O1": "O1",
        "O2": "O2"
      },
      "V2": {
        "O1": "O1"
      },
      "V3": {
        "O3": "O3"
      }
    }
  },
  "P2": {
    "L1": {
      "V2": {
        "O1": "O1"
      }
    },
    "L2": {
      "V1": {
        "O2": "O2"
      }
    },
    "L3": {
      "V4": {
        "O2": "O2"
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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