Python:根据给定的 array/list 创建树结构

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

现在好了,这个给定的数组可以根据用户输入而改变,它总是有这种“结构”,但它不是先验定义的。

我的目标是定义这样一个结构,并有可能在最低级别上知道给定 children 的所有 parents。

总而言之,按照@trincot 的建议,我输入了一个 input/output 数据类型:

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

在输出中,我想知道最后一级是什么元素,并知道该元素的所有 parents。

当然,如果其他数据类型更合适,我将不胜感激任何建议。

感谢您的帮助!

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

这是一个实现:

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