首页 > 解决方案 > 如何从模板生成数据结构?

问题描述

我有数据模板:

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

我用伪代码给出数据结构,因为我不确定我应该使用什么合适的数据结构。

标签: pythonalgorithm

解决方案


您可以使用str.split('lot')andlist.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}]}]

关于您的评论“我用伪代码给出数据结构,因为我不确定我应该使用什么合适的数据结构。”:

我无法帮助您弄清楚要使用什么数据结构,因为您的问题没有给出上下文是什么。


推荐阅读