Подтвердить что ты не робот

Ключ, соответствующий максимальному значению в словаре python

a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)

Может ли кто-нибудь дать мне объяснение, почему это возвращает ключ, соответствующий максимальному значению? Меня это очень насторожило. Спасибо!

4b9b3361

Ответ 1

Словарь "a" является итерируемой структурой в python. Когда вы выполняете цикл с помощью for x in a, вы перебираете ключи в словаре.

Во второй строке функция max принимает два аргумента: Итерируемый объект (a) и необязательную функцию "ключ". Функция Key будет использоваться для оценки значения элементов в - наибольшая из которых будет возвращена.

Примеры:

>>> a = dict(((1,3),(0,-1),(3,21)))
>>> for x in a:
...     print x #output the value of each item in our iteration
... 
0
1
3

Обратите внимание, что выводятся только "ключи". Когда мы передаем каждый из этих ключей, чтобы "получить"...

>>> a.get(0)
-1
>>> a.get(1)
3
>>> a.get(3)
21

Мы получаем значение для каждого ключа. Теперь посмотрим, как работает max.

>>> b=[2, 3, 5, 6, 4]
>>> max(b)
6
>>> def inverse(x):
...     return 1.0 / x
... 
>>> max(b, key=inverse)
2

Как вы можете видеть, max (по умолчанию) просто найдет наибольшее число в нашем списке с истребителями. Если мы определим "обратную" функцию, она вернет самый большой элемент в b, для которого inverse(item) является наибольшим.

Объедините эти два элемента, и мы увидим, что max(a, key=a.get) вернет item в a, для которого наибольшее значение a.get(item). то есть ключ, соответствующий наибольшему значению.

Ответ 2

Вы спрашиваете, как работает параметр key? Он принимает вызываемый, который применяется к каждому элементу словаря. В случае вашего словаря он просто делает это:

a.get(1)  # 3
a.get(0)  # -1
a.get(3)  # 21

max затем использует результат ключевой функции как значение сравнения, поэтому он, очевидно, выберет элемент, который возвращает самое высокое значение, т.е. 3.