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

如何向嵌套字典的关联列表项添加键值对(Ansible场景)

Ansible 实现嵌套字典映射方案

输入变量示例

假设现有变量结构如下:

db_dict: {}
container_db: "CORCL"
seed_latest_success_list:
  - pdb: "PDB01"
    latest_success: "2024-05-20T12:30:00"
  - pdb: "PDB02"
    latest_success: "2024-05-19T09:15:00"

方案1:PDB直接映射latest_success值

如果需要将pdb作为键,latest_success作为对应值(非嵌套字典),用items2dict过滤器直接转换即可:

- name: 生成PDB与latest_success的键值对字典
  set_fact:
    pdb_latest_map: "{{ seed_latest_success_list | items2dict(key_name='pdb', value_name='latest_success') }}"

- name: 更新主字典db_dict的目标结构
  set_fact:
    db_dict: "{{ db_dict | combine({ container_db: pdb_latest_map }, recursive=True) }}"

最终生成的db_dict结构

db_dict:
  CORCL:
    PDB01: "2024-05-20T12:30:00"
    PDB02: "2024-05-19T09:15:00"

方案2:PDB映射嵌套子字典

如果需要将pdb作为键,对应值为包含latest_success的子字典,用循环合并的方式更可靠(避免复杂过滤器链出错):

- name: 循环构建嵌套结构的PDB字典
  set_fact:
    pdb_latest_map: "{{ pdb_latest_map | default({}) | combine({ item.pdb: {'latest_success': item.latest_success} }) }}"
  loop: "{{ seed_latest_success_list }}"

- name: 更新主字典db_dict的目标结构
  set_fact:
    db_dict: "{{ db_dict | combine({ container_db: pdb_latest_map }, recursive=True) }}"

最终生成的db_dict结构

db_dict:
  CORCL:
    PDB01:
      latest_success: "2024-05-20T12:30:00"
    PDB02:
      latest_success: "2024-05-19T09:15:00"

常见问题说明

之前用combine+map失败,大概率是因为map返回的是列表而非键值对字典,或者没有正确指定映射规则。items2dict是Ansible专门用于将列表元素转换为键值对字典的过滤器,而循环合并的方式更直观,适合复杂嵌套结构的构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:20:08