Python-如何将新值与for循环中的先前值进行比较?

时间:2017-04-20 18:50:01

标签: python python-3.x dictionary for-loop iteration

我的功能需要在字典中找到速度最快的字符。字符名称是关键,值是统计信息的元组。速度是值元组的索引6。如何将之前的最高速度与当前值进行比较,看它是否更高?一旦我获得了速度,我如何获取该角色的类型(值元组中的索引1和2)并将它们作为列表返回?

示例数据:

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

Patrick的速度最高(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()

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')