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

Ansible:通过Jinja2展平字典嵌套列表并筛选子列表

问题描述

现有一个字典嵌套列表的结构,内部数据可包含任意复杂度的类型(字符串、字典或多层嵌套对象),示例结构如下:

my_dict:
  my_list_a:
    - a
    - b
    - c
  my_list_b:
    - a
    - d
    - e
  list_c:
    - f

需要完成两个目标:

  1. 通过Jinja2将该结构展平为单一列表(无需严格保留顺序),目标格式如下:
my_combined_list:
  - a
  - b
  - c
  - a
  - d
  - e
  - f
  1. 在合并过程中基于条件筛选子列表,例如仅保留键名以my_开头的子列表,排除list_c。
解决方案

由于Jinja2不支持列表推导式,我们可以通过嵌套for循环结合条件判断来实现需求:

核心实现代码

{% set my_combined_list = [] %}
{% for key, value in my_dict.items() %}
  {% if key starts with 'my_' %}
    {% for item in value %}
      {% do my_combined_list.append(item) %}
    {% endfor %}
  {% endif %}
{% endfor %}

# 输出合并后的列表
my_combined_list: {{ my_combined_list }}

关键说明

  • 使用{% do %}语句直接操作列表(注意:Jinja2默认未启用do扩展,在Ansible这类常用环境中是默认开启的,若需单独启用可在环境配置中添加extensions=['jinja2.ext.do'])。
  • 条件判断key starts with 'my_'用于筛选符合要求的子列表,可根据实际需求修改判断逻辑(比如匹配特定后缀、包含指定字符串等)。
  • 对于多层嵌套的复杂对象,只要子项是可遍历的列表结构,内层循环会自动逐个处理其中的元素,无需额外修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:15:06