如何在Ansible中对双重列表数组排序并保持子元素绑定?
Ansible 嵌套列表按子数组首元素排序实现方案
核心实现思路
直接使用Ansible内置的sort过滤器,指定每个子数组的索引0位元素作为排序键即可。该方法不会拆分子数组内部的绑定元素,会完整保留所有重复条目,同首元素的条目会保留原有相对顺序,完全匹配需求中对子数组第二元素排序无要求的规则。
完整可运行示例
- hosts: localhost gather_facts: false vars: # 原始待排序列表 dataset: - [dataone, A] - [datatwo, C] - [dataa, B] - [dataa, C] - [dataa, B] # 核心排序逻辑:指定按子数组第0位元素排序 data: "{{ dataset | sort(attribute='0') }}" tasks: - name: 打印排序后结果 debug: var: data
运行结果验证
执行上述playbook后,输出的data变量内容完全符合预期结构:
ok: [localhost] => { "data": [ ["dataa", "B"], ["dataa", "C"], ["dataa", "B"], ["dataone", "A"], ["datatwo", "C"] ] }
注意事项
- 不要使用会拆分列表结构的过滤器(比如先提取首元素排序再重组的写法),避免子数组绑定关系错乱、重复项丢失的问题。
- 如果需要对子数组第二个元素也做同组排序,只需要在sort后追加多级排序参数即可,当前需求无此要求无需额外配置。
内容的提问来源于stack exchange,提问作者asking
相关产品推荐
相关产品推荐

