Ключ, соответствующий максимальному значению в словаре python
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
Может ли кто-нибудь дать мне объяснение, почему это возвращает ключ, соответствующий максимальному значению? Меня это очень насторожило. Спасибо!
Ответ 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.
Как вы можете видеть, 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.