ключ, соответствующий максимальному значению в словаре Python - PullRequest
16 голосов
/ 08 марта 2011
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)

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

Ответы [ 2 ]

23 голосов
/ 08 марта 2011

Словарь "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

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

>>> 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) является наибольшим. то есть ключ, соответствующий наибольшему значению.

1 голос
/ 08 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...