我想讓一個串列按照以下規則進行排序 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"] )
人員。 sort(key = lambda p。(abs(p["height"] - 180) 。p["weight"]==75, p["weight"]))
return persons
以下面的樣本資料為例,
array = [{"name": "Guido Batista", "高度": 195, "weight": 110}。
{"name":"Heitor Tostes", "身高": 180, "weight": 75}。
{"name":"Bruno Costa", "身高": 180, "weight": 75}。
{"name":"Joao Kleber", "身高": 180, "weight": 65}。
{"name":"Rafael Rodrigues", "身高": 165, "weight": 110}。
{"name":"Ricardo Neto", "身高": 170, "weight": 70}。
{"name":"Juca Carvalho", "身高": 180, "weight": 77}]
我需要將串列排序為:
[
{"name":"Bruno Costa", "height": 180, "weight": 75}。
{"name":"Heitor Tostes", "身高": 180 , "weight": 75}。
{"name":"Joao Kleber", "身高": 180, "weight": 65}。
{"name":"Juca Carvalho", "身高": 180, "weight": 77}。
{"name":"Ricardo Neto", "身高": 170, "weight": 70}。
{"name": "Guido Batista", "高度": 195, "weight": 110}。
{"name":"Rafael Rodrigues", "身高": 165, "weight": 110}。
]
uj5u.com熱心網友回復:
這是因為False是一個比True低的值。使用
persons. sort(key = lambda p: (abs(p["height"] - 180), p["weight"]! =75, p["weight"])
改變 "weight "鍵的比較。
uj5u.com熱心網友回復:
這樣就可以得到想要的結果,而不用進一步復雜化:
persons. sort(key = lambda p: (abs(p["height"] - 180) 。not(p["weight"]==75), p["weight"] )
默認情況下,排序順序為升序。而最后一塊拼圖是這樣的(來自doc)
布爾語。這些代表真值False和True。這兩個 代表值False和True的兩個物件是唯一的布爾型 物件。布爾型別是普通整數的一個子型別,而布爾 值的行為就像0和1一樣,在幾乎所有的情況下都是如此。 情況下,布林值的行為就像0和1一樣,但例外的是,當轉換為字串時, 字串 "False "或 "True "會被分別回傳
。
在升序中,0排在1之前,這就是為什么上面發布的這一行可以解決這個問題。
uj5u.com熱心網友回復:
嘗試:
array = [
{"name": "Guido Batista", "高度": 195, "weight": 110}。
{"name": "Heitor Tostes", "高度": 180, "weight": 75}。
{"name": "Bruno Costa", "高度": 180, "weight": 75}。
{"name": "Joao Kleber", "高度": 180, "weight": 65}。
{"name": "Rafael Rodrigues", "高度": 165, "weight": 110}。
{"name": "Ricardo Neto", "高度": 170, "weight": 70}。
{"name": "Juca Carvalho", "高度": 180, "weight": 77}。
]
array = sorted(
陣列。
key=lambda p: (
abs(p["height"] - 180),
p["weight"] !=75。
p["name"]。
-p["weight"]。
),
)
print(array)
列印:
[
{"name": "Bruno Costa", "身高": 180, "體重": 75},
{"姓名": "Heitor Tostes", "身高": 180, "體重": 75},
{"name": "Joao Kleber", "身高": 180, "體重": 65},
{"name": "Juca Carvalho", "身高": 180, "體重": 77},
{"name": "Ricardo Neto", "身高": 170, "體重": 70},
{"姓名": "Guido Batista", "身高": 195, "體重": 110},
{"name": "Rafael Rodrigues", "身高": 165, "體重": 110},
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/308550.html
標籤:
上一篇:添加串列中的元素
下一篇:用索引將多個串列合二為一
