如何按字符串递归将列表元素分组

我正在尝试根据列表元素中的子字符串将列表分类为子列表。

这是我的清单:

keys = ['simulation__config__name', 'simulation__config__ver', 'simulation__config__rev', 'simulation__model__name', 'simulation__name', 'site__name', 'site__placement', 'name']

我想要得到的是这样的:

out = [
      [
         ['simulation__config__name', 'simulation__config__ver', 'simulation__config__rev'],
         ['simulation__model__name'],
         ['simulation__name'],
      ],
      [
          ['site__name', 'site__placement'],
      ],
      ['name'],
]

首先将它们按第一个键分组,然后用“ __”除以第二个键,然后递归直到没有更多。

即首先将它们按仿真,位置,名称进行拆分...然后按配置,模型,名称等进行仿真...

这是我目前的方法:

def recursive_group(iterable):
    i = 0
    return [list(g) for k,g in groupby(iterable, lambda x: x.split('__')[i])]

我从来没有真正做过任何类型的递归代码,我一直在努力寻找如何将它们组合在一起的方法。

我知道如果手动调用该函数即可,但是如何将其放入一个循环/递归函数中,而该循环/递归函数将不断调用自身,直到不再有groupby的可能性了?

评论