Python:从给定数组/列表创建树结构

2024-04-29 13:50:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我最后成了一个问题

假设我有一个给定的数组,或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 I的建议,输入输入/输出数据类型:

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

在输出中,我想知道最后一级的元素是什么,并且知道这个元素的所有父元素

当然,如果另一种数据类型更合适,我将非常感谢您的建议

谢谢你的帮助


Tags: 元素l1v3数组结构v2v4v1
1条回答
网友
1楼 · 发布于 2024-04-29 13:50:52

我没有看到示例输入和示例输出之间的联系,所以我想猜测一下您想要什么

下面是一个实现:

# 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 = forest
    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"
      }
    }
  }
}

相关问题 更多 >