如何将键:列表值字典组合到 Ansible 中的 key:value 列表?

How to combine a key: list-value dict to a list of key:value in Ansible?

我有这本字典:

{
  "key1": [
    "value1",
    "value2"
  ],
  "key2": [
    "value3"
  ]
}

我想要这样的结果:

[
  {"key1": "value1"},
  {"key1": "value2"},
  {"key2": "value3"}
]

你知道怎么做吗?

您可以组合使用过滤器 dict2items and subelements 以实现此目的。

鉴于剧本:

- hosts: all
  gather_facts: no

  tasks:
    - set_fact: 
        list: "{{ list | default([]) + [{ item.0.key: item.1 }] }}"
      loop: "{{ dict | dict2items | subelements('value') }}"
      vars: 
        dict:
          key1:
            - value1
            - value2
          key2:
            - value3
    
    - debug:
        var: list

这将产生重述:

PLAY [all] **********************************************************************************************************

TASK [set_fact] *****************************************************************************************************
ok: [localhost] => (item=[{'key': 'key1', 'value': ['value1', 'value2']}, 'value1'])
ok: [localhost] => (item=[{'key': 'key1', 'value': ['value1', 'value2']}, 'value2'])
ok: [localhost] => (item=[{'key': 'key2', 'value': ['value3']}, 'value3'])

TASK [debug] ********************************************************************************************************
ok: [localhost] => {
    "list": [
        {
            "key1": "value1"
        },
        {
            "key1": "value2"
        },
        {
            "key2": "value3"
        }
    ]
}

PLAY RECAP **********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0