如何按值对字典进行排序
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_ip2
的average_ping_time
小于dest_ip1
的average_ping_time
且小于average_ping_time
的 dest_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)
我有一个字典,看起来像:
{"dest_ip1":average_ping_time,"dest_ip2":average_ping_time,"dest_ip3:average_ping_time}
我想按值(average_ping_time)排序,假设dest_ip2
的average_ping_time
小于dest_ip1
的average_ping_time
且小于average_ping_time
的 dest_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)