如何删除字典中source、dest键对应列表内重复IP并输出指定格式
问题根因
你此前使用{{output.msg|unique}}不生效的核心原因是作用对象错误:unique过滤器此时是对外层的字典列表做去重,而你的需求是对每个字典内部source、dest对应的子列表做去重,两者操作的对象完全不匹配。
解决方案
你可以通过遍历列表+单独处理子字段的方式实现需求,以下是Ansible场景下的常用实现方案:
方案1:提前预处理生成新变量
在playbook中添加如下任务,遍历原始输出并完成子列表去重:
- name: 对source和dest字段的IP段去重 set_fact: processed_result: >- {{ processed_result | default([]) + [ item | combine({ 'source': item.source | unique, 'dest': item.dest | unique }) ] }} loop: "{{ output.msg }}"
执行完成后,processed_result变量就是符合你期望格式的输出,可以直接后续使用或者打印。
方案2:直接在Jinja渲染时处理
如果你是在模板文件中生成最终输出,可以直接在渲染逻辑里做去重,无需额外预处理变量:
[ {% for entry in output.msg %} { "Name": "{{ entry.Name }}", "source": {{ entry.source | unique | to_nice_json(indent=4) }}, "dest": {{ entry.dest | unique | to_nice_json(indent=4) }} }{{ ',' if not loop.last }} {% endfor %} ]
这里用to_nice_json可以保证输出的格式和你期望的缩进一致。
内容的提问来源于stack exchange,提问作者netv
相关产品推荐
相关产品推荐

