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

如何在Ansible Playbook中合并具有相同键的多个字典?

在Ansible Playbook中合并多个同键字典为列表值的字典

我需要合并多个具有相同键的字典,输入示例:

dict1: { 'A': 'value1' }
dict2: { 'A': 'value2' }
dict3: { 'A': 'value3' }

期望输出:

dict4: { 'A': ['value1', 'value2', 'value3'] }

请问如何在Ansible Playbook中实现?


方法1:循环收集值并构建字典

适合明确知道要合并的字典列表的场景,步骤简单直接:

  • 先把要合并的字典放到一个列表里
  • 循环遍历每个字典,提取目标键的值并收集到列表中
  • 最后将列表赋值给目标字典的对应键

示例Playbook:

- name: 合并同键字典为列表值
  hosts: localhost
  vars:
    dict1: { 'A': 'value1' }
    dict2: { 'A': 'value2' }
    dict3: { 'A': 'value3' }
    target_key: 'A'
  tasks:
    - name: 收集所有目标键的值
      set_fact:
        collected_values: "{{ collected_values | default([]) + [item[target_key]] }}"
      loop:
        - "{{ dict1 }}"
        - "{{ dict2 }}"
        - "{{ dict3 }}"

    - name: 组装最终字典
      set_fact:
        dict4: { "{{ target_key }}": "{{ collected_values }}" }

    - name: 查看结果
      debug:
        var: dict4

方法2:用json_query批量提取值

如果要合并的字典数量较多,先把字典统一放到列表里,再用json_query一次性提取所有目标键的值,代码更简洁:

示例Playbook:

- name: 用json_query快速合并同键字典
  hosts: localhost
  vars:
    dict_list:
      - { 'A': 'value1' }
      - { 'A': 'value2' }
      - { 'A': 'value3' }
    target_key: 'A'
  tasks:
    - name: 直接构建目标字典
      set_fact:
        dict4:
          "{{ target_key }}": "{{ dict_list | json_query('[*].' + target_key) }}"

    - name: 查看结果
      debug:
        var: dict4

扩展:处理多键合并场景

如果存在多个不同键需要合并(比如同时有键'A'和'B'),可以先提取所有唯一键,再逐个收集对应值:

示例Playbook:

- name: 合并多键字典为列表值
  hosts: localhost
  vars:
    dict_list:
      - { 'A': 'value1', 'B': 'b1' }
      - { 'A': 'value2', 'B': 'b2' }
      - { 'A': 'value3', 'B': 'b3' }
  tasks:
    - name: 收集所有键
      set_fact:
        all_keys: "{{ all_keys | default([]) + item.keys() | list }}"
      loop: "{{ dict_list }}"

    - name: 去重得到唯一键列表
      set_fact:
        unique_keys: "{{ all_keys | unique }}"

    - name: 为每个键组装值列表
      set_fact:
        dict4: "{{ dict4 | default({}) | combine({ item: dict_list | json_query('[*].' + item) }) }}"
      loop: "{{ unique_keys }}"

    - name: 查看结果
      debug:
        var: dict4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:15:35