如何简洁实现无需知晓总条目数的模板映射功能
解决方案
核心逻辑是递归占位符替换+深拷贝模板+遍历数据条目,无需提前获知data的总长度,适配任意条目数,仅依赖Python标准库即可实现。
完整实现代码
import copy # 递归替换模板中的占位符 def render_template(tpl, data, placeholder_map=None): # 可配置占位符和数据key的映射关系 if placeholder_map is None: placeholder_map = { "<ID>": "id", "<PORT>": "port", "<NAME>": "description" } if isinstance(tpl, str): return data.get(placeholder_map.get(tpl, tpl), tpl) elif isinstance(tpl, list): return [render_template(item, data, placeholder_map) for item in tpl] elif isinstance(tpl, dict): return {k: render_template(v, data, placeholder_map) for k, v in tpl.items()} else: return tpl # 原始模板和数据 template = [{"id": "<ID>", "interfaces": [{"port": "<PORT>", "description": "<NAME>"}]}] data = [ {'id': '1234', 'port': 'ETH0', "description": "MyDescName"}, {'id': '4567', 'port': 'ETH1', "description": "MyDescName-2"} ] # 生成结果 result = [] for item in data: # 每次深拷贝模板避免不同条目之间互相影响 tpl_copy = copy.deepcopy(template[0]) result.append(render_template(tpl_copy, item)) # 输出验证 print(result)
运行上述代码输出的结果和示例给出的预期结构完全一致。
方案优势
- 自动适配任意长度的data列表,无需提前统计条目数
- 支持任意嵌套层级的模板结构,修改模板不用调整渲染逻辑
- 可通过
placeholder_map灵活调整占位符和数据字段的对应关系,无需硬编码字段名
内容的提问来源于stack exchange,提问作者ovntatar
相关产品推荐
相关产品推荐

