如何按值对字典进行排序

How to sort dict by value

我有一个字典,看起来像:

{"dest_ip1":average_ping_time,"dest_ip2":average_ping_time,"dest_ip3:average_ping_time}

我想按值(average_ping_time)排序,假设dest_ip2average_ping_time小于dest_ip1average_ping_time且小于average_ping_timedest_ip3,处理后应该是这样的:

[(ip2:ip2_ping_time),(ip1:ip1_ping_time),(ip3:ip3_ping_time)]

我将 Ansible 任务配置为:

- name: Create and add items to dictionary
    set_fact:
      all_hosts_average_ping_time: "{{ all_hosts_average_ping_time | default({}) | combine({item['ip'] : item['average_ping_time']}) }}"
    with_items:
    - { 'ip' : 'dest_ip1', 'average_ping_time' : 23.36  }
    - { 'ip' : 'dest_ip2', 'average_ping_time' : 24.79  }
    - { 'ip' : 'dest_ip3', 'average_ping_time' : 28.96  }

您可以使用 Jinja2 plugin called dictsort.

如果要按值过滤:

# example values
# dest_ip1: 5.0
# dest_ip2: 1.0
# dest_ip3: 3.0

- debug:
    msg: "{{ all_hosts_average_ping_time | dictsort(false, 'value') }}"

使用我的示例值,结果是:

[
    "dest_ip2",
    1.0
],
[
    "dest_ip3",
    3.0
],
[
    "dest_ip1",
    5.0
]

如果您想颠倒顺序,只需将该语句添加到 dictsort:

dictsort(false, 'value', reverse=true)