0

I have a list of string where each line is the hierarchy of a multi level nested list :

Level_1A/Level_2A/Level_3A/item0001
Level_1A/Level_2A/Level_3A/item0002
Level_1A/Level_2A/Level_3B/item0003
Level_1A/Level_2B/item0004
Level_1A/Level_2C/Level_3C/item0005
Level_1A/Level_2C/Level_3C/item0006
Level_1B/Level_2D/Level_3D/Level_4A/item0007
Level_1B/Level_2D/Level_3D/Level_4A/item0008
Level_1B/Level_2E/Level_3E/item0009

And I would like to format the list to be able to print it under this format :

Cascading nested lists

My brain is melting right now somehow, I tried with zip and a loop for but I am really at lost here.

Nelewout
  • 6,281
  • 3
  • 29
  • 39
alebrann
  • 9
  • 2
  • Does this [question](https://stackoverflow.com/questions/9727673/list-directory-tree-structure-in-python) solve what you are trying to accomplish? – Mindcraft Dec 06 '21 at 18:59

1 Answers1

2

You can use recursion:

from collections import defaultdict
def group(d, l=0):
   r = defaultdict(list)
   for a, *b in d:
      r[a].append(b)
   for a, b in r.items():
      print(('  '*l)+('' if not l else ' + ')+a)
      if all(b):
         group(b, l+1)

data = [['Level_1A', 'Level_2A', 'Level_3A', 'item0001'], ['Level_1A', 'Level_2A', 'Level_3A', 'item0002'], ['Level_1A', 'Level_2A', 'Level_3B', 'item0003'], ['Level_1A', 'Level_2B', 'item0004'], ['Level_1A', 'Level_2C', 'Level_3C', 'item0005'], ['Level_1A', 'Level_2C', 'Level_3C', 'item0006'], ['Level_1B', 'Level_2D', 'Level_3D', 'Level_4A', 'item0007'], ['Level_1B', 'Level_2D', 'Level_3D', 'Level_4A', 'item0008'], ['Level_1B', 'Level_2E', 'Level_3E', 'item0009']]
group(data)

Output:

Level_1A
   + Level_2A
     + Level_3A
       + item0001
       + item0002
     + Level_3B
       + item0003
   + Level_2B
     + item0004
   + Level_2C
     + Level_3C
       + item0005
       + item0006
Level_1B
   + Level_2D
     + Level_3D
       + Level_4A
         + item0007
         + item0008
   + Level_2E
     + Level_3E
       + item0009
Ajax1234
  • 69,937
  • 8
  • 61
  • 102