{'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)和按字母顺序排序。
答案 0 :(得分:0)
将元组作为键传递给sorted
函数,否定第二个元素(技能级别)以降序排序,如果技能级别关联,则按作业按升序排序:
sorted(result,key = lambda x: (-x[1], x[0]))
who(db, "Cleaning", 4)
# [('Charles', 5), ('Adam', 4), ('Diane', 4)]
答案 1 :(得分:0)
您可以通过为key
参数提供一个返回元组的函数来对两个属性进行排序。试试这个:
return sorted(result, key = lambda x: (-x[1], x[0]))
这里你在元组中使x[1]
为负,按技能级别按降序排序,然后按名称升序排序。这消除了对reverse=True
的需求。