Классический: вы немедленно возвращаетесь в конце цикла for
.Таким образом, это означает, что вы возвращаете максимум результата после первой итерации.Таким образом, он еще не оценил все элементов.
При этом можно значительно улучшить это, используя max(..)
:
from operator import itemgetter
max_kv = max(autolager.items(), key=itemgetter(1))
Это приведет к2-кортеж, содержащий комбинацию ключ-значение с наибольшим значением, поэтому:
>>> max(autolager.items(), key=itemgetter(1))
('BMW', 11)
, если вы хотите получить все ключи с этим значением, мы можем выполнить второй прогон черезthe dictionary затем:
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()<b>, default=None</b>)
return max_v, [k for k, v in autolager.items() if v == max_v]
Для пустого словаря это будет возвращать:
>>> maxlagerbestand({})
(None, [])