Как построить вложенный список из плоского в Python? - PullRequest
0 голосов
/ 18 января 2012

У меня есть плоский список, например:

flat = ['1', '1-1', '1-1-1', '1-2', '2', '2-1', '2-2', '3']

, который мне нужно преобразовать во вложенный список, где каждый уровень (тире, за которым следует число) начинает новый подсписок, например:

result = ['1', ['1-1', ['1-1-1'], '1-2'], '2', ['2-1', '2-2'], '3']

Какие-нибудь советы, как это сделать в Python?

1 Ответ

4 голосов
/ 18 января 2012
def nested(flat, level=0):
    for k, it in itertools.groupby(flat, lambda x: x.split("-")[level]):
        yield next(it)
        remainder = list(nested(it, level + 1))
        if remainder:
            yield remainder

Пример:

>>> list(nested(flat, 0))
['1', ['1-1', ['1-1-1'], '1-2'], '2', ['2-1', '2-2'], '3']
...