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

Ansible字典列表循环:如何正确提取键值对注入命令?

问题分析与解决方案

你的问题核心在于:my_example_list里的每个元素是仅包含单个动态键名的字典(比如第一个元素是{"key1": "value_of_first_key"},键名是key1而非统一的key字段),所以直接用item.key和item.value会找不到对应字段——因为这些字典根本没有叫key或value的键。

先修正你的变量定义(Ansible中变量赋值不用=,正确写法如下):

my_example_list:
  - {"key1": "value_of_first_key"}
  - {"key2": "value_of_second_key"}
  - {"key3": "value_of_third_key"}

方法1:用dict2items过滤器统一结构

这个过滤器可以把单个键值对的字典转换成{"key": "xxx", "value": "yyy"}的标准结构,这样就能直接用item.key和item.value了:

- name: 遍历字典列表并输出键值
  debug:
    msg: "Here is my {{ item.key }} which keeps {{ item.value }}"
  loop: "{{ my_example_list | map('dict2items') | map('first') | list }}"

解释:

  • map('dict2items')把每个字典转成包含键值对的列表(比如{"key1": "xxx"}变成[{"key": "key1", "value": "xxx"}])
  • map('first')取出每个列表里的唯一元素
  • list把结果转成可循环的列表

方法2:直接提取动态键和值

因为每个字典只有一个键值对,所以可以直接用first过滤器取键和值:

- name: 遍历字典列表并输出键值
  debug:
    msg: "Here is my {{ item.keys() | first }} which keeps {{ item.values() | first }}"
  loop: "{{ my_example_list }}"

解释:

  • item.keys() | first取出当前字典的唯一键名(比如key1)
  • item.values() | first取出对应的值

你之前尝试失败的原因

  1. my_example_list[1] | last:my_example_list[1]是列表的第二个元素(字典{"key2": "..."}),对字典用last会取最后一个键名,而你想取列表最后一个元素应该写my_example_list | last
  2. my_example_list[1] | first:同样是对字典操作,取的是字典的第一个键名key2,而非你想要的元素值
  3. item.key/item.value失败:因为每个item的键名是动态的key1/key2/key3,没有统一的key字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:05:36