You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发Ansible过滤器插件实现字典中嵌套列表的双层objectId排序?

嗨,我来帮你搞定这个双层排序的需求!你现在的过滤器确实只完成了顶层列表的排序,没处理每个父对象里的members子列表。咱们调整一下插件代码,让它同时搞定两层的排序。

修改后的过滤器插件代码
class FilterModule(object):
    def filters(self):
        return {
            'sortbysubkey': self.sortbysubkey,
        }

    def sortbysubkey(self, items_to_sort, sorting_key):
        # 先对顶层列表按指定key排序
        sorted_top_level = sorted(items_to_sort, key=lambda item: item[sorting_key])
        # 遍历每个顶层元素,对其members列表也按相同key排序
        for item in sorted_top_level:
            if 'members' in item and isinstance(item['members'], list):
                item['members'] = sorted(item['members'], key=lambda member: member[sorting_key])
        return sorted_top_level
代码逻辑解释
  • 第一步:先和之前一样,用sorted()对顶层的列表按传入的sorting_key(也就是objectId)排序,得到排序后的顶层列表。
  • 第二步:遍历每个顶层元素,检查它是否包含members键,并且members是列表类型(做个容错处理更稳妥),然后对members列表也用同样的sorting_key进行排序,把排序后的结果重新赋值给item['members']。
  • 最后返回处理好的双层排序后的列表。
验证Playbook用法

你的Playbook代码不用改,还是原来的写法:

- ansible.builtin.debug:
    msg: "{{ test | sortbysubkey('objectId') }}"

运行之后,就能得到你想要的结果:顶层父对象按objectId排序,每个父对象里的members列表也按objectId从小到大排列。

这样修改后,就完美实现了你要的双层排序需求啦!

内容的提问来源于stack exchange,提问作者Belabacsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:57:29