Ansible&;Jinja2:将两个列表转换为键、值dict

Ansible&;Jinja2:将两个列表转换为键、值dict,ansible,jinja2,Ansible,Jinja2,我想在Ansible中将两个列表合并成一个键、值字典 我有以下列表(AWS资源ID): 第一个列表中的第一项对应于第二个列表中的第一项,第二项对应于另一个第二项,依此类推 我想将这两个列表结合起来,得到这样一个dict: ok: [localhost] => { "vpc_natgw_ids_dict": [ "vpc-123": "nat-098", "vpc-234": "nat-987", "vpc-345": "nat-876

我想在Ansible中将两个列表合并成一个键、值字典

我有以下列表(AWS资源ID):

第一个列表中的第一项对应于第二个列表中的第一项,第二项对应于另一个第二项,依此类推

我想将这两个列表结合起来,得到这样一个dict:

ok: [localhost] => {
    "vpc_natgw_ids_dict": [
        "vpc-123": "nat-098",
        "vpc-234": "nat-987",
        "vpc-345": "nat-876",
        "vpc-456": "nat-765"
    ]
}
我如何实现这样的目标?

例如:

set_fact:
  vpc_natgw_ids_dict: "{{ dict(vpc_natgw_ids[0] | zip(vpc_natgw_ids[1])) }}"

IRC用户seschwar在#ansible发布的另一个解决方案在freenode.net上也使用了Jinja2:

- set_fact:
    vpc_natgw_ids_dict: >-
      {%- set ns = namespace(ids={}) -%}
      {%- for i in vpc_natgw_ids[0] -%}
        {{- ns.ids.__setitem__(vpc_natgw_ids[0][loop.index0], vpc_natgw_ids[1][loop.index0]) -}}
      {%- endfor -%}
      {{- ns.ids -}}
- debug:
    var: vpc_natgw_ids_dict

谢谢你,techraf!
- set_fact:
    vpc_natgw_ids_dict: >-
      {%- set ns = namespace(ids={}) -%}
      {%- for i in vpc_natgw_ids[0] -%}
        {{- ns.ids.__setitem__(vpc_natgw_ids[0][loop.index0], vpc_natgw_ids[1][loop.index0]) -}}
      {%- endfor -%}
      {{- ns.ids -}}
- debug:
    var: vpc_natgw_ids_dict