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

Ansible如何根据列表匹配字典键生成指定结构的新字典

方案1:修正你原有循环写法

你原来的写法存在两个问题:

  • loop参数不需要把匹配列表mylist也加入遍历序列,只需要遍历目标字典转换后的键值对列表即可
  • when条件直接判断当前遍历的字典键是否属于匹配列表即可

完整的正确任务代码如下:

- name: "Create a new dict, when name(s) in the list match the key in the dict"
  set_fact:
    new_dict: "{{ new_dict | default({}) | combine({item.key: item.value}) }}"
  loop: "{{ my_dict | dict2items }}"
  when: item.key in mylist

方案2:更简洁的无循环写法

你可以直接用Jinja2过滤器链实现需求,不需要显式循环,执行效率更高:

- name: "Generate filtered dict with built-in filters"
  set_fact:
    new_dict: "{{ my_dict | dict2items | selectattr('key', 'in', mylist) | items2dict }}"

逻辑说明:

  1. 用dict2items把my_dict转为[{key:xxx, value:xxx}, ...]格式的列表
  2. 用selectattr筛选出key属于匹配列表mylist的条目
  3. 用items2dict把筛选后的列表转回字典格式,直接得到你需要的new_dict结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:03