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

Ansible:如何将静态字典循环合并到动态字典列表中

解决Ansible中静态字典合并到动态字典列表每个元素的问题

问题分析

你提供的static是包含单个字典的列表,dynamic是字典列表,需要将static内的字典合并到dynamic的每一个元素中。之前的尝试要么未遍历整个列表,要么存在语法逻辑错误,核心问题是没正确结合列表遍历与字典合并操作。

正确实现方法

方法1:使用map过滤器(推荐,简洁高效)

利用Ansible的map过滤器对dynamic列表的每个元素批量应用combine合并操作:

- set_fact:
    combined: "{{ dynamic | map('combine', static.0) | list }}"

代码说明:

  • static.0:因为static是包含单个字典的列表,通过索引0取出里面的字典对象
  • map('combine', static.0):对dynamic列表中的每一个字典元素,执行combine操作,合并static.0的键值对
  • | list:将map返回的迭代器转换为列表,得到最终的合并结果

方法2:使用循环(适合需要额外逻辑的场景)

如果合并时需要添加其他自定义处理,可通过loop遍历dynamic逐步构建结果列表:

- set_fact:
    combined: "{{ combined | default([]) + [item | combine(static.0)] }}"
  loop: "{{ dynamic }}"

代码说明:

  • default([]):初始化combined为空列表,避免首次执行时变量未定义报错
  • item | combine(static.0):将当前循环的dynamic元素与静态字典合并
  • + [ ... ]:将合并后的字典追加到combined列表中

验证结果

执行上述代码后,combined变量将生成你期望的结构:

"combined": [
    {
        "item1": "abc",
        "item2": "def",
        "item3": "dkslks",
        "item4": "kkk",
        "item5": "aa",
        "item6": "aaa",
        "item7": "aaaa"
    },
    {
        "item1": "abc",
        "item2": "def",
        "item3": "dkslks",
        "item4": "kkk",
        "item5": "bb",
        "item6": "bbb",
        "item7": "bbbb"
    },
    {
        "item1": "abc",
        "item2": "def",
        "item3": "dkslks",
        "item4": "kkk",
        "item5": "cc",
        "item6": "ccc",
        "item7": "cccc"
    }
]

注意:你提供的原始JSON数据存在语法错误(item7缺少闭合引号),实际使用时需修正,否则Ansible会解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:25:25