【发布时间】:2021-11-10 02:02:19
【问题描述】:
我想得到一个根据以下规则排序的列表persons.sort(key = lambda p: (abs(p["height"] - 180), p["weight"]==75, p["weight"])) 即我需要它首先按其与高度 180 的接近程度进行排序,然后是所有等于 75 的权重值,然后我想要它们按权重升序排列...
我想出了以下代码,但它不起作用...
def get_ordered_list(persons):
persons.sort(key = lambda p: p["name"] )
persons.sort(key = lambda p: (abs(p["height"] - 180), p["weight"]==75, p["weight"]))
return persons
以下面的示例数据为例,
array = [{"name": "Guido Batista", "height": 195, "weight": 110},
{"name":"Heitor Tostes", "height": 180, "weight": 75},
{"name":"Bruno Costa", "height": 180, "weight": 75},
{"name":"Joao Kleber", "height": 180, "weight": 65},
{"name":"Rafael Rodrigues", "height": 165, "weight": 110},
{"name":"Ricardo Neto", "height": 170, "weight": 70},
{"name":"Juca Carvalho", "height": 180, "weight": 77}]
我需要将列表按如下方式排序:
[
{"name":"Bruno Costa", "height": 180, "weight": 75},
{"name":"Heitor Tostes", "height": 180 , "weight": 75},
{"name":"Joao Kleber", "height": 180, "weight": 65},
{"name":"Juca Carvalho", "height": 180, "weight": 77},
{"name":"Ricardo Neto", "height": 170, "weight": 70},
{"name": "Guido Batista", "height": 195, "weight": 110},
{"name":"Rafael Rodrigues", "height": 165, "weight": 110},
]
【问题讨论】:
-
您能否说明发生了什么错误。
-
哦,是的..我可以...结果输出如下 [{'name': 'Joao Kleber', 'height': 180, 'weight': 65}, { 'name': 'Juca Carvalho', 'height': 180, 'weight': 77}, {'name': 'Bruno Costa', 'height': 180, 'weight': 75},{'name': 'Heitor Tostes', 'height': 180, 'weight': 75}, {'name': 'Ricardo Neto', 'height': 170, 'weight': 70}, {'name': 'Guido Batista' , 'height': 195, 'weight': 110}, {'name': 'Rafael Rodrigues', 'height': 165, 'weight': 110}]...这不是正确的顺序...实际上没有利用第二个标准。
标签: python list sorting dictionary sortedlist