如何将键:列表值字典组合到 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
我有这本字典:
{
"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