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

如何在Ansible中基于3个列表构建字典嵌套字典结构

实现方法

直接用Ansible原生过滤器即可完成结构转换,全程不需要自定义脚本,适配动态列名场景:

  • 提取公共列名
    由于所有节点的列名完全一致,List2里的重复列名不需要全部保留,直接取第一组即可:
    - name: 初始化统一字段列表
      ansible.builtin.set_fact:
        data_fields: "{{ list2[0] }}"
    
  • 组装目标嵌套字典
    用zip将节点名和对应节点的数值列表一一配对,再将每组字段名和数值配对转为字典,合并到最终结构中:
    - name: 生成最终嵌套字典结构
      ansible.builtin.set_fact:
        node_data: "{{ node_data | default({}) | combine({item[0]: dict(data_fields | zip(item[1]))}) }}"
      loop: "{{ list1 | zip(list3) }}"
    
    生成的node_data变量结构和预期完全一致:
    {
      "node1": {"field1": "valueA1", "field2": "valueA2", "field3": "valueA3"},
      "node2": {"field1": "valueB1", "field2": "valueB2", "field3": "valueB3"},
      "node3": {"field1": "valueC1", "field2": "valueC2", "field3": "valueC3"}
    }
    
  • 导出为JSON文件
    直接调用JSON序列化过滤器写入文件即可,供后续流程或外部系统调用:
    - name: 写入结果到JSON文件
      ansible.builtin.copy:
        content: "{{ node_data | to_nice_json(indent=2) }}"
        dest: /data/collected_node_data.json
        mode: '0644'
    

扩展适配

如果后续单节点拉取的数据存在多行(非示例中单行值的场景),只需要在处理单节点值时增加一层循环,将每一行值和字段名配对为字典后存入列表即可,不需要修改核心逻辑,完全兼容动态变化的列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:03:17