Python字典的最大值和与函数和forloop对应的键

2024-10-01 04:59:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从带有函数和for循环的字典中获取最大值和相应的键。这是我的密码:

Autolager = {'Audi' : 9, 'BMW' : 11, 'Mercedes' : 8}

def Maxlagerbestand(Autolager):  
    MaxAutoValue = 0  
    MaxAutoName = None  
    for i in Autolager:  
        if Autolager[i] > MaxAutoValue:  
            MaxAutoValue = Autolager[i]  
            MaxAutoName = [k for k, v in Autolager.items() if v == MaxAutoValue]  
        return (MaxAutoValue, MaxAutoName)      
print (Maxlagerbestand(Autolager))

输出是(9,['Audi']),但应该是(11,['BMW])

我甚至在没有功能的情况下检查了它:

MaxAutoValue = 0  
for i in Autolager:  
    if Autolager[i] > MaxAutoValue:  
        MaxAutoValue = Autolager[i]  
print (MaxAutoValue)

这里的输出正确地用11表示。你知道吗

我上面的代码出了什么问题?我很感激你给我的任何暗示。你知道吗


Tags: 函数in密码forif字典defmercedes
3条回答

虽然马克的答案可行,但你可以简化代码

Autolager = {'Audi' : 9, 'BMW' : 11, 'Mercedes' : 8}

def Maxlagerbestand(Autolager):  
    MaxAutoValue = 0  
    MaxAutoName = None  
    for key, value in Autolager.items():  
        if value > MaxAutoValue:  
            MaxAutoValue = value 
            MaxAutoName = key 
    return (MaxAutoValue, MaxAutoName)  

print (Maxlagerbestand(Autolager))

return (MaxAutoValue, MaxAutoName)放入for循环中,而不是在for循环完成之后。你知道吗

Autolager = {'Audi' : 9, 'BMW' : 11, 'Mercedes' : 8}

def Maxlagerbestand(Autolager):  
    MaxAutoValue = 0  
    MaxAutoName = None  
    for i in Autolager:  
        if Autolager[i] > MaxAutoValue:  
            MaxAutoValue = Autolager[i]  
            MaxAutoName = [k for k, v in Autolager.items() if v == MaxAutoValue]  
    return (MaxAutoValue, MaxAutoName)      
print (Maxlagerbestand(Autolager))

我也不知道你想用[k for k, v in Autolager.items() if v == MaxAutoValue]做什么。用i[i]代替它不是更容易吗?你知道吗

经典的方法是:在for循环结束时立即返回。这意味着在第一次迭代后返回最大值。因此,它尚未评估所有元素。你知道吗

也就是说,通过使用max(..),这可以得到很大的改善:

from operator import itemgetter

max_kv = max(autolager.items(), key=itemgetter(1))

这将产生一个包含键值组合和最大值的2元组,因此:

>>> max(autolager.items(), key=itemgetter(1))
('BMW', 11)

如果要获取具有此值的所有键,我们可以再次运行字典:

from operator import itemgetter

def maxlagerbestand(autolager):
    max_v = max(autolager.values())
    return max_v, [k for k, v in autolager.items() if v == max_v]

然后返回:

>>> maxlagerbestand(autolager) 
(11, ['BMW']) 

对于一个空字典({}),上面会出错。我们可以将default=值添加到max(..)以返回给定字典为空的值:

def maxlagerbestand(autolager):
    max_v = max(autolager.values(), default=None)
    return max_v, [k for k, v in autolager.items() if v == max_v]

对于空字典,则返回:

>>> maxlagerbestand({}) 
(None, []) 

相关问题 更多 >