业务场景需求:求解最优rto、rpo指标,即找出rpo和rto均最小的一组值。
list_result = []
list1 = [{"rto":1,"rpo":7},
{"rto":2,"rpo":5},
{"rto":2,"rpo":10},
{"rto":3,"rpo":4},
{"rto":3,"rpo":10},
{"rto":4,"rpo":11}]
while True:
"""
因为最小值可能不止一组,因此考虑删最大值比较方便
分别对rto、rpo排序,每次循环会删除最大的一组值,直到不存在最大值时跳出循环
"""
# rto相同的按rpo排序
# 也可以用这种方式排序,需要用到这个类from operator import itemgetter
# sorted(list1, key=itemgetter("rto","rpo"))
sorted_rto = sorted(list1, key=lambda x: (x["rto"],x["rpo"]))
sorted_rpo = sorted(list1, key=lambda x: (x["rpo"],x["rto"]))
# 如果列表只有一个元素不能删除
if sorted_rpo[-1] == sorted_rto[-1] and len(list1) >1:
list1.remove(sorted_rto[-1])
else:
break
# 区别于append追加,extend用于列表扩展,即将list1的值添加到list_result中
list_result.extend(list1)
直接上图说明,排序后:
第一次循环会删除(4,11),第二次删除(3,10)