Python - 字典 - 最大值和根据函数和 for 循环的键
Python - Dictionary - max value and according key with function and for-loop
我想从具有函数和 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。
我上面的代码哪里出了问题?感谢您的任何提示。
您将 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]
不是更容易吗?
一个经典的:你 立即 return 在 for
循环的末尾。所以这意味着你 return 在 第一次 迭代后的结果最大值。因此,它尚未评估 all 个元素。
也就是说,使用 max(..)
:
可以改善很多
from operator import itemgetter
max_kv = max(autolager.items(), key=itemgetter(1))
这将导致包含具有最大值的键值组合的二元组,因此:
>>> 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]
这里这个然后 returns:
>>> maxlagerbestand(autolager)
(11, ['BMW'])
对于空字典({}
),上面的代码会出错。我们可以将 default=
值添加到 max(..)
到 return 给定字典为空的值:
def maxlagerbestand(autolager):
max_v = max(autolager.values()<b>, default=None</b>)
return max_v, [k for k, v in autolager.items() if v == max_v]
对于空字典,这将 return:
>>> maxlagerbestand({})
(None, [])
尽管 Mark 的回答可行,但您可以简化代码
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))
我想从具有函数和 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。
我上面的代码哪里出了问题?感谢您的任何提示。
您将 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]
不是更容易吗?
一个经典的:你 立即 return 在 for
循环的末尾。所以这意味着你 return 在 第一次 迭代后的结果最大值。因此,它尚未评估 all 个元素。
也就是说,使用 max(..)
:
from operator import itemgetter
max_kv = max(autolager.items(), key=itemgetter(1))
这将导致包含具有最大值的键值组合的二元组,因此:
>>> 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]
这里这个然后 returns:
>>> maxlagerbestand(autolager)
(11, ['BMW'])
对于空字典({}
),上面的代码会出错。我们可以将 default=
值添加到 max(..)
到 return 给定字典为空的值:
def maxlagerbestand(autolager):
max_v = max(autolager.values()<b>, default=None</b>)
return max_v, [k for k, v in autolager.items() if v == max_v]
对于空字典,这将 return:
>>> maxlagerbestand({})
(None, [])
尽管 Mark 的回答可行,但您可以简化代码
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))