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

如何在Ansible中无需循环合并嵌套与普通字典列表

用Ansible单行过滤器合并嵌套与普通字典列表

输入数据

vars:
  nested:
    - nest1: 
      - name: item1
        info: foo
    - nest2: 
      - name: item2
        info: bar
  unnested:
    - name: item3
      info: baz
    - name: item4
      info: foobar

期望结果

all_items: [ 
  {name: item1, info: foo}, 
  {name: item2, info: bar}, 
  {name: item3, info: baz}, 
  {name: item4, info: foobar}
]

需求说明

不想通过循环嵌套项再追加的方式实现,希望用combine()、json_query或其他Ansible过滤器,在单行中直接创建新变量,无需循环任务。

解决方案

方案1:使用json_query过滤器

通过json_query提取嵌套结构中的所有子项,再与非嵌套列表拼接:

all_items: "{{ unnested + nested | json_query('[].*[]') }}"
  • 解释:nested | json_query('[].*[]')会遍历nested中的每个字典,取出所有键对应的列表元素,将嵌套结构直接扁平化。

方案2:使用map+flatten组合过滤器

先提取嵌套字典的值,再通过两层扁平化处理,最后合并列表:

all_items: "{{ unnested + nested | map(attribute='values') | flatten(levels=2) }}"
  • 解释:map(attribute='values')取出每个nest1/nest2对应的列表,得到[[[{...}]], [[{...}]]];flatten(levels=2)将两层嵌套展开为[{...}, {...}],再与unnested拼接得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:11