You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jinja2模板将Python字典中的列表动态展开为YAML?

问题:如何用Jinja2动态展开Python字典生成YAML,无需硬编码键名和元素数量?

现有Python代码用于通过Jinja2模板生成YAML文件:

from jinja2 import Environment, FileSystemLoader
import glob

def map_template(context,template_path,template_name,destination):
    environment = Environment(loader = FileSystemLoader(template_path), trim_blocks=True, lstrip_blocks=True)
    results_filename = destination
    results_template = environment.get_template(template_name)
    with open(results_filename, mode="w", encoding="utf-8") as results:
        results.write(results_template.render(context))
        print(f"... wrote {results_filename}")

上下文结构如下:

{'node' : {'value' : [{'key1':val1,'key2':"str2",'key3':val3}] } }

期望生成的YAML输出:

node:
     - key1:val1
       key2:"str2"
       key3: val3

当前模板采用硬编码方式,需要手动指定每个键名和列表索引:

node:
      - {{node.value[0].key1}}
        {{node.value[0].key2}}
        {{node.value[0].key3}}

现询问是否存在无需硬编码元素数量和键名,即可用Jinja2模板动态展开列表的方法?


解决方案

完全可以,利用Jinja2的循环语法就能实现动态展开,无需硬编码任何键名或列表长度。

核心思路

  1. 遍历node.value列表中的每个字典元素,对应YAML里的每个-条目
  2. 对每个字典,遍历其键值对,动态生成YAML的键值行

最终Jinja2模板

node:
{% for item in node.value %}
  - {% for key, value in item.items() %}
    {{ key }}: {% if value is string %}"{{ value }}"{% else %}{{ value }}{% endif %}
    {% endfor %}
{% endfor %}

细节说明

  • 外层循环处理列表中的所有元素,哪怕node.value有多个字典,也能自动生成对应YAML条目
  • 内层循环遍历字典的所有键值对,不需要提前知道键名
  • 加入字符串判断逻辑,确保字符串类型的值被包裹在双引号中,和期望输出格式一致
  • 模板缩进需和YAML格式匹配,保证生成的文件语法合法

扩展场景测试

如果node.value包含多个字典元素:

{'node' : {'value' : [
    {'key1':val1,'key2':"str2",'key3':val3},
    {'key4':val4,'key5':"str5"}
]} }

使用上述模板会自动生成:

node:
  - key1: val1
    key2: "str2"
    key3: val3
  - key4: val4
    key5: "str5"

内容的提问来源于stack exchange,提问作者Kspr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:01:01