[英]how to sort a list by two different keys?
{'Adam': {('Cleaning',4), ('Tutoring',2), ('Baking',1)},
'Betty': {('Gardening',2), ('Tutoring',1), ('Cleaning',3)},
'Charles': {('Plumbing',2), ('Cleaning',5)},
'Diane': {('Laundry',2), ('Cleaning',4), ('Gardening',3)}}
def who(db : {str:{(str,int)}}, job: str, min_skill : int) -> [(str,int)]:
result = []
if type(min_skill) != int:
raise AssertionError
if min_skill < 0 or min_skill > 5:
raise AssertionError
for key,value in db.items():
for item in value:
if item[0] == job and item[1] >= min_skill:
result.append((key,item[1]))
return sorted(result,key = lambda x: x[1],reverse = True )
who函數,它將數據庫,工作(str),最低技能水平(int)作為參數; 它返回一個2元組的列表:人員及其技能水平,按技能水平遞減排序。 如果兩個人的技能水平相同,則應按字母順序顯示。
我的函數能夠以最低技能水平(int)對列表進行排序,但是無法按字母順序對列表進行排序。
我收到以下錯誤:
*Error: who(db,'Cleaning' ,4) -> [('Charles', 5), ('Diane', 4), ('Adam', 4)] but should -> [('Charles', 5), ('Adam', 4), ('Diane', 4)]
有人可以幫助我修復我的代碼,以便按最低技能水平(int)和字母順序進行排序。
將一個元組傳遞給已sorted
函數作為鍵,否定第二個元素(技能級別)以降序對其進行排序,如果技能級別綁定,則按作業將其按升序進行排序:
sorted(result,key = lambda x: (-x[1], x[0]))
who(db, "Cleaning", 4)
# [('Charles', 5), ('Adam', 4), ('Diane', 4)]
您可以通過為key
參數提供一個返回元組的函數來對兩個屬性進行排序。 嘗試這個:
return sorted(result, key = lambda x: (-x[1], x[0]))
在這里,您可以在元組內部使x[1]
負,以按技能級別降序排列,然后按名稱的升序排列。 這消除了對reverse=True
的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.