Ansible:如何将list2元素与list1对应元素合并为同一行元素?
问题描述
现有两个列表:
list1: [ "xxxx", "yyyyy", "yyyyy", "yyyyy" ] list2: [ "xxxx", "yyyyy", "yyyyy", "yyyyy" ]
我原本用以下代码尝试合并两个列表:
set_fact: list1: "{{ list1 | default([]) + list2 }}" loop: "{{ list2 }}"
这段代码虽然能运行,但结果是把list2的所有元素直接追加到list1后面,变成这样:
[ "xxxx", "yyyyy", "yyyyy", "yyyyy", "xxxx", "yyyyy", "yyyyy", "yyyyy" ]
而我想要的是对应位置的元素拼接合并,最终结果应该是:
[ "xxxxxxxx", "yyyyyyyyyy", "yyyyyyyyyy", "yyyyyyyyyy" ]
解决方案
你的循环逻辑完全错误,不需要遍历list2来追加,而是要利用Ansible的过滤器实现对应元素的拼接:
set_fact: merged_list: "{{ list1 | zip(list2) | map('join') | list }}"
逻辑说明:
zip(list2):将list1和list2的对应位置元素配对,生成类似[("xxxx", "xxxx"), ("yyyyy", "yyyyy"), ...]的元组列表;map('join'):对每个元组执行字符串拼接操作,把元组里的两个元素合并成一个字符串;list:把处理后的结果转换成列表格式。
这样就能得到你期望的、对应元素合并后的新列表。
内容的提问来源于stack exchange,提问作者GenZ
相关产品推荐
相关产品推荐

