在 Ansible 中连接嵌套列表的元素

问题描述 投票:0回答:2

我有一个嵌套列表

str
,如下所示:

[["22","ABC","XYZ"],["555","IJK","PQR"],...] 

我必须将内部列表的元素与

/
组合起来,然后用
,
将它们连接起来形成一个字符串,如下所示:

22/ABC/XYZ,555/IJK/PQR,...

我尝试过

set_fact
和 jinja2 但没有运气。

- set_fact:
     str1: |-
       {%- set fs = "" -%}
       {%- set im = "" -%}
       {%- for i in str -%}
         {%- for elem in i -%}
           {%- set im = im + "/" + elem -%}
         {%- endfor -%}
         {%- set fs = fs + "," + im -%}
       {%- endfor -%}
       {{ fs }}
- debug: var=str1      

输出:

TASK [debug var=str1] **********************************
ok: [host1] => {
    "str1": "" 

预期输出:

TASK [debug var=str1] **********************************
ok: [host1] => {
    "str1": "22/ABC/XYZ,555/IJK/PQR" 

谢谢

ansible jinja2
2个回答
2
投票

首先映射过滤器join(/)到列表的项目,然后join(,)它们

  - set_fact:
      str1: "{{ str | map('join', '/') | join(',') }}"
  - debug: var=str1

给予

  str1: 22/ABC/XYZ,555/IJK/PQR

1
投票

使用

wiht_list
创建一个带有列表的 var,其中包含用
/
连接的项目,然后用
,
连接它。

  - set_fact:
      str1: "{{ str1 | default([]) + [ item | join('/') ] }}"
    with_list: "{{ str }}"

  - debug:
      msg: "{{ str1 | join(',') }}"
© www.soinside.com 2019 - 2024. All rights reserved.