ocean.1234
ocean.1234

Reputation: 127

Python- How to compare new value with previous value on for-loop?

My function needs to find the character with the highest speed in a dictionary. Character name is the key and value is a tuple of statistics. Speed is index 6 of the value tuple. How do I compare the previous highest speed to the current value to see if it is higher? Once I get the speed, how can I take that character's types (index 1 and 2 in value tuple,) and return them as a list?

Example Data:

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

Patrick has the highest speed(100) and his types are star and fish. Should return [star,fish]

Here is my current code which doesn't work since I don't know how to compare previous and current:

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()

Upvotes: 1

Views: 7596

Answers (2)

Shiping
Shiping

Reputation: 1327

If I understood what you meant.

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

Upvotes: 1

Stephen Rauch
Stephen Rauch

Reputation: 49804

The sorted function can do this quite easily:

Code:

from operator import itemgetter

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

This code sorts by key 6, in reverse order so that the largest is first, and then set fastest to the first element of the sort. Then it simply returns the two desired fields from fastest.

Test Code:

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

print(fastest_type(d))

Results:

('star', 'fish')

Upvotes: 1

Related Questions