0

我有一个 2 列表:

a = ['user','user2','user','user2']
b = ['value1','value1','value2','value1']

是否可以合并两者并在它们之间添加“_”

寻找结果:

result = ['user_value1','user2_value1','user_value2','user2_value1']

两个列表的长度将相同。

在下面尝试没有运气:(基于链接合并两个列表并在 Jinja 中交替结果?

{%- set a = ['user1','user2','user3','user4'] -%}
{%- set b = ['value1','value2','value3','value4'] -%}
{%- set combined = (a,b) -%}

{%- set lengths = [] %}
{%- for row in combined -%}{%- if lengths.append(row|length)-%}{%- endif -%}{%- endfor -%}
{%- set max_length = (lengths|sort)[-1] -%}
{%- set rows = [] -%}    

{%- for r in range(max_length) -%}
        {%- for a in combined -%}
               {%- if a[r] -%}{%- if rows.append(a[r]) -%}{%- endif -%}{%- endif -%}
    {%- endfor -%}
{%- endfor -%}

{{ rows }}

谢谢你!

4

2 回答 2

0

试试这个:

- set_fact:
    some_list: "{{ (some_list | default([])) + [item | join('_')] }}"
  loop: "{{ a | zip(b) | list }}"

- debug: 
    msg: "{{ some_list | to_json }}"

调试输出:

TASK [debug] *******************************************************************************************************************************************************************************
ok: [localhost] => 
  msg: '["user1_value1", "user2_value2", "user3_value3", "user4_value4"]'
于 2020-06-12T06:45:01.477 回答
0

没有必要循环列表。过滤器映射也可以完成这项工作

    - set_fact:
        result: "{{ a|zip(b)|map('join','_')|list }}"



问:“将 2 个列表转换为 dict ... 第一个列表具有相同的一组值 ['user','user','user1','user1']。在这种情况下该怎么办?”

A:使用dict过滤器。等效键将用最后一个值相互替换。例如

    - set_fact:
        result: "{{ dict(a|zip(b)) }}"
    - debug:
        var: result

    "result": {
        "user": "value2",
        "user2": "value1"
    }
于 2020-06-12T16:03:04.990 回答