У меня есть шаблон данных:

templ: [
    lots: [
        lot: [
            name: none
            objs: [
                obj: [
                    code: none
                ]
            ]           
        ]
    ]
]

И лента с такими данными, как: lot obj lot obj obj lot obj lot obj obj. Идея следующая. Мне нужно определить структуру данных результата по ленточным данным. lot obj - лот с одним объектом lot obj obj - лот с двумя объектами

И так далее. Итак, из: lot obj

Результат должен быть таким же, как и исходные данные:

lots: [
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]
        ]           
    ]
]

Из: lot obj obj это должно быть:

lots: [
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]
            obj: [
                code: none
            ]           
        ]           
    ]
]

Из: lot obj lot obj obj lot obj lot obj obj

Должно быть:

lots: [
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]           
        ]           
    ]
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]
            obj: [
                code: none
            ]               
        ]           
    ]
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]           
        ]           
    ]       
    lot: [
        name: none
        objs: [
            obj: [
                code: none
            ]
            obj: [
                code: none
            ]               
        ]           
    ]
    
]

Я привожу структуру данных в псевдокоде, потому что не уверен, какую правильную структуру данных мне следует использовать.

0
Dmitry Bubnenkov 13 Окт 2020 в 15:23

1 ответ

Лучший ответ

Вы можете использовать str.split('lot') и list.count('obj'), чтобы вычислить количество объектов в каждой партии:

txt = 'lot obj lot obj obj lot obj lot obj obj'

lot_counts = [lot.count('obj') for lot in txt.split('lot')[1:]]
# [1, 2, 1, 2]

lots = [{'name': None, 'objs': [{'code': None} for _ in range(lot_count)]} for lot_count in lot_counts]
# [{'name': None, 'objs': [{'code': None}]},
#  {'name': None, 'objs': [{'code': None}, {'code': None}]},
#  {'name': None, 'objs': [{'code': None}]},
#  {'name': None, 'objs': [{'code': None}, {'code': None}]}]

По поводу вашего замечания «Я привожу структуру данных в псевдокоде, потому что не уверен, какую правильную структуру данных мне следует использовать»:

Я не могу помочь вам выяснить, какую структуру данных использовать, поскольку ваш вопрос не дает контекста, для чего это нужно.

2
Stef 13 Окт 2020 в 12:38