IIUC, ваш желаемый вывод на самом деле что-то вроде:
myDict = {
'1': {
'1-1': ['1-1-1','1-1-2','1-1-3','1-1-4'],
'1-2': ['1-2-1','1-2-2'],
'1-3': ['1-3-1']
},
....,
'n': {.....,'n-m':[....,'n-m-k']}
}`
Вот один из способов использования itertools.groupby
:
from itertools import groupby
myList = [
'1-1-1','1-1-2','1-2-1','1-2-2','1-3-1', '2-1-1', '2-2-2', '2-2-3', '4-5-6'
]
# a helper function
def mySplit(s, max_split):
return {
v: list(g)
for v, g in groupby(
s,
lambda x: "-".join(x.split("-", max_split)[:max_split])
)
}
myDict = {v: mySplit(g, 2) for v, g in groupby(myList, lambda x: x.split("-", 1)[0])}
print(myDict)
#{'1': {'1-1': ['1-1-1', '1-1-2'], '1-2': ['1-2-1', '1-2-2'], '1-3': ['1-3-1']},
# '2': {'2-1': ['2-1-1'], '2-2': ['2-2-2', '2-2-3']},
# '4': {'4-5': ['4-5-6']}}
С некоторой работой это можно обобщить, чтобы работать дляпроизвольное количество тире.