Ansible 我如何按元素子字符串的降序对数组进行排序

Ansible How do i sort an array in descending order upon the element substring

下面是我的数组:

- set_fact:
    diskout:
      - 85_20.198.65.132
      - 86_52.140.118.141
      - 84_20.198.75.31
      - 82_20.204.75.114
      - 83_20.204.24.160

我希望仅根据由 _ 分隔的第一个子字符串按降序排序,同时忽略下划线之后的任何内容。

因此,我的预期输出是:

      - 86_52.140.118.141
      - 85_20.198.65.132
      - 84_20.198.75.31
      - 83_20.204.24.160
      - 82_20.204.75.114

我尝试了下面的方法,但它没有给我想要的输出:

- debug:
    msg: "The automation will run on {{ item }}"
  with_items: "{{ diskout | reverse | list }}"

你能推荐一下吗?

创建索引,例如

    - debug:
        msg: "{{ _dict|dict2items|
                  sort(attribute='key', reverse=true)|
                  map(attribute='value')|
                  list }}"
      vars:
        _index: "{{ diskout|map('regex_replace', '^(.*)_(.*)$', '\1')|list }}"
        _dict: "{{ dict(_index|zip(diskout)) }}"

给予

  msg:
  - 86_52.140.118.141
  - 85_20.198.65.132
  - 84_20.198.75.31
  - 83_20.204.24.160
  - 82_20.204.75.114

下一个选项可能会更快

    - debug:
        msg: "{{ _dict|sort(reverse=true)|map('extract', _dict)|list }}"
      vars:
        _index: "{{ diskout|map('regex_replace', '^(.*)_(.*)$', '\1')|list }}"
        _dict: "{{ dict(_index|zip(diskout)) }}"