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

如何使用Ansible Jinja2 reject过滤器排除info列表中的xyz键?

移除Ansible中info列表字典里的xyz键

你需要移除info列表中字典的顶层xyz键,以及嵌套在abc里的xyz键,之前用reject('equalto','xyz')或reject('match', '[xyz]')无效,是因为这两个过滤器是过滤列表元素,而非操作字典的键。


方案1:移除顶层xyz键(动态保留其他键)

用dict2items把字典转成键值对列表,过滤掉key为xyz的项,再转回字典:

- set_fact:
    info: "{{ info | map('dict2items') | map('rejectattr', 'key', 'equalto', 'xyz') | map('items2dict') | list }}"
  • 逻辑:遍历info列表的每个字典,将字典拆分为键值对数组,剔除键为xyz的条目,再重新组合成字典,最后转回列表。

方案2:同时移除顶层和嵌套的xyz键

如果需要同时移除abc字典里的xyz键,可以用循环手动处理嵌套结构:

- set_fact:
    info: >-
      {% set updated_list = [] %}
      {% for item in info %}
          # 清理abc中的xyz键
          {% set cleaned_abc = item.abc | dict2items | rejectattr('key', 'equalto', 'xyz') | items2dict %}
          # 清理顶层xyz键并替换处理后的abc
          {% set cleaned_item = item | combine({'abc': cleaned_abc}) | dict2items | rejectattr('key', 'equalto', 'xyz') | items2dict %}
          {% do updated_list.append(cleaned_item) %}
      {% endfor %}
      {{ updated_list }}

方案3:用json_query指定保留的键(适合键固定的场景)

如果info里的键是固定的,可以直接用json_query选择需要保留的键,间接排除xyz:

- set_fact:
    info: "{{ info | json_query('[].{effect: effect, name: name, abc: {name: abc.name}}') }}"
  • 逻辑:明确指定每个字典要保留的键和嵌套结构,自动排除未提及的xyz。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:15:10