更新:我已經接受了答案。但是,如果有人能解釋為什么我在問題的方法 2 中收到錯誤訊息“keyerror:1”,我會很高興的。謝謝!
----------------原始問題----------------
我正在完成一項練習,但無論我嘗試過什么,都沒有正確的結果。我瀏覽了所有可用的答案,但我仍然無法弄清楚。預期答案如下所述:
練習模板包含一個名為 Car 的類,它通過兩個屬性表示汽車的特征:make (str) 和 top_speed (int)。
請撰寫一個名為fastest_car(cars: list) 的函式,該函式將Car 物件串列作為其引數。
該函式應回傳最快汽車的品牌。您可能會假設總會有一輛汽車的最高時速。不要更改作為引數給出的串列,或對 Car 類定義進行任何更改。
您可以使用以下代碼來測驗您的功能:
if __name__ == "__main__":
car1 = Car("Saab", 195)
car2 = Car("Lada", 110)
car3 = Car("Ferrari", 280)
car4 = Car("Trabant", 85)
cars = [car1, car2, car3, car4]
print(fastest_car(cars))
# Ferrari
我試過這樣:
class Car:
def __init__(self,make:str,top_speed:int):
self.make=make
self.top_speed=top_speed
def fastest_car(self,list):
list.sort(key = lambda x : x.top_speed)
print("Sort by speed")
print(list)
if __name__ == "__main__":
car1 = Car("Saab", 195)
car2 = Car("Lada", 110)
car3 = Car("Ferrari", 280)
car4 = Car("Trabant", 85)
cars = [car1, car2, car3, car4]
Car.fastest_car(cars[-1])
#error message: TypeError: fastest_car() missing 1 required positional argument: 'list'
我也嘗試了正常的方法:
#method 2
cars=[{'Saab':195},{'Lada':110},{'Ferrari':280},{'Trabant':85}]
a=sorted(cars,key = lambda x : x[1])
print(a)#just print the sorted list
error message:
----> 3 a=sorted(cars,key = lambda x : x[1])
4 print(a)
KeyError: 1
如果您能指出我做錯了什么,我將不勝感激。謝謝你!
指出錯誤并獲得知識
uj5u.com熱心網友回復:
只需使用 max() 函式:
fastest_car = max(cars, key=lambda x: x.top_speed)
print(fastest_car.make)
print(fastest_car.top_speed)
>>> out
'''
Ferrari
280
UPD
對于字典串列,你可以試試這個:
cars=[{'Saab':195},{'Lada':110},{'Ferrari':280},{'Trabant':85}]
d = {}
for i in cars:
d.update(i)
max(d,key=d.get) # 'Ferrari'
uj5u.com熱心網友回復:
所以感謝@12944qwerty 和@Barmer 的幫助,這個問題是這樣解決的:
class Car:
def __init__(self,make:str,top_speed:int):
self.make=make
self.top_speed=top_speed
@staticmethod
def fastest_car(list):
list.sort(key = lambda x : x.top_speed)
print("Sort by speed")
return list[-1]
def __repr__(self):
return self.make
if __name__ == "__main__":
car1 = Car("Saab", 195)
car2 = Car("Lada", 110)
car3 = Car("Ferrari", 280)
car4 = Car("Trabant", 85)
cars = [car1, car2, car3, car4]
print(Car.fastest_car(cars))
#result
Sort by speed
Ferrari
我也嘗試將 @staticmethod 拿走,但我仍然得到相同的結果。我希望有人可以解釋一下為什么,如果可能的話,有人可以告訴我錯誤訊息在我嘗試的正常方法中的含義,KeyError:1 謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528996.html
上一篇:考慮到總分以及兩支球隊的凈勝球差距,如何從字典中回傳最佳球隊?
下一篇:更新字典字典
