Как сгенерировать структуру данных из шаблона?

#python #algorithm

#python #алгоритм

Вопрос:

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

 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
            ]               
        ]           
    ]
    
]
  

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

Ответ №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}]}]
  

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

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

Комментарии:

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

2. Можете ли вы привести пример ввода? Кроме того, для чего эти структуры будут использоваться после их создания?