2017-04-20 803 views
1

我的功能需要在字典中查找速度最快的字符。字符名稱是關鍵,值是統計的元組。速度是值元組索引6。我如何將之前的最高速度與當前值進行比較以查看它是否更高?一旦我獲得了速度,我該如何將這個角色的類型(值元組中的索引1和2)並將它們作爲列表返回?Python-如何比較for循環中的新值與以前的值?

實施例的數據:

d={'spongebob':(1,'sponge','aquatic',4,5,6,70,6), 'patrick':(1,'star','fish',4,5,6,100,1)} 

帕特里克具有最高的速度(100)和他的類型是starfish。應該返回[明星,魚]

這裏是我當前的代碼不工作,因爲我不知道如何比較以前和當前:

def fastest_type(db): 
    l=[] 
    previous=0 
    new=0 
    make_list=[[k,v] for k,v in db.items()] 
    for key,value in db.items(): 
     speed=value[6] 
    return l_types.sort() 
+0

你比較以前與環中[6]值。如果它小於值[6],則將其設置爲值[6]並將值保存爲新值。然後在循環後返回新的[1:3]。 – Shiping

回答

1

sorted功能可以做到這一點很容易:

代碼:

from operator import itemgetter 

def fastest_type(db): 
    fastest = sorted(db.values(), reverse=True, key=itemgetter(6))[0] 
    return fastest[1], fastest[2] 

此代碼排序的關鍵6,以相反的順序,使最大的是第一,然後將fastest設置爲排序的第一個元素。然後它從最快返回兩個期望的字段。

測試代碼:

d = { 
    'spongebob':(1,'sponge','aquatic',4,5,6,70,6), 
    'patrick':(1,'star','fish',4,5,6,100,1) 
} 

print(fastest_type(d)) 

結果:

('star', 'fish') 
1

如果我明白你的意思。

def fastest_type(db): 
    speed = 0 
    new = [] 
    for key,value in db.items(): 
     if speed < value[6]: 
      speed = value[6] 
      new = value[1:3] 
    return list(new) # return list instead of tuple 
+0

這會在每個測試用例上產生以下錯誤:UnboundLocalError:在分配之前引用的局部變量「速度」 –

+0

@ ocean.1234抱歉有錯誤。以前= 0應該是速度= 0.從您的代碼複製,並無法更改它。 – Shiping

+0

這仍然失敗所有測試用例。該列表有錯誤的類型。 –