Рубрики
Без рубрики

Как получить ключ с максимальным значением в словаре Python?

Никакая библиотека – используйте максимальную функцию с клавишным аргументом: *** MAX (DIC, .get) ***

Автор оригинала: Chris.

Я провел утренние часы на важной миссии. Что такое самый чистый, самый быстрый и самый лаконичный ответ на следующий вопрос: как вы находите ключ с максимальным значением в словаре Python? Большинство ответов на Интернете говорят, что вам нужно использовать библиотеку, но это не правда!

Просто используйте функцию MAX с помощью клавиш-аргумента, установленного на Dict.get :

income = {'Anne' : 1111,
          'Bert' : 2222,
          'Cara' : 9999999}

print(max(income, key=income.get))
# Cara

Максимальная функция переходит на все ключи, к в словаре доходов и принимает максимальное значение после применения доход. Получить (k) метод. Получить () Метод возвращает значение, указанное для ключа, к в словаре.

Играйте с этим сами в нашем интерактивном коде Shell:

Вы хотите развивать навыки Хорошо округлый Python Professional То же оплачивается в процессе? Станьте питоном фрилансером и закажите свою книгу Оставляя крысиную гонку с Python На Amazon ( Kindle/Print )!

Теперь прочитайте эту 4-минутную статью или посмотрите короткое видео, чтобы полностью понять эту концепцию.

Если вы уже узнали что-то из этого руководства, почему бы не присоединиться к моей бесплатной программе обучения Python? Я называю это Finxter Email Computer Science Academy -И только что: а Бесплатно, простое в использовании академия электронной почты что Обучает вас питон в небольших ежедневных дозах для начинающие и Плюсы Одинакота!

Узнайте Python и присоединяйтесь к Академии науки по электронной почте FINXTER. Это весело !

Какая максимальная функция в Python?

Скорее всего, вы уже знаете функцию Max (…) Python. Вы можете использовать его, чтобы найти максимальное значение любого намерения или любого количества значений. Вот несколько примеров, использующих максимальную функцию, не указав какие-либо дополнительные аргументы.

# Key that starts with 'largest' letter of the alphabet
print(max(income))
# Mary

# Largest value in the dictionary income
print(max(income.values()))
# 878000

# Largest value in the given list
print(max([1,4,7,5,3,99,3]))
# 99

# Compare lists element wise, max is first list to have a larger
# element 
print(max([1,2,3],[5,6,4]))
# [5, 6, 4]

# Largest value in the given sequence of numbers
print(max(5,7,99,88,123))
# 123

Все идет нормально. Максимальная функция очень гибкая. Он работает не только для цифр, но и для строк, списков и любого другого объекта, который вы можете сравнить с другими объектами.

Теперь давайте посмотрим на необязательные аргументы максимальной функции. Один из них – «ключ» Отказ Давайте узнаем, что это делает.

Как работает ключевой аргумент функции Python Max ()?

Последние примеры показывают интуитивные разработки максимальной функции: вы проходите один или несколько повторных документов в качестве позиционных аргументов.

Intermezzo : Что такое иеристы? Итализатор является объектом, из которого вы можете получить итератор. ITERATOR – это объект, на котором вы можете позвонить следующему () методу. Каждый раз, когда вы звоните следующим (), вы получаете «следующий» элемент, пока не получите все элементы из итератора. Например, Python использует итераторы для петлей, чтобы пройти все элементы списка, все символы строки или все клавиши в словаре.

Когда вы указываете клавишный аргумент, определите функцию, которая возвращает значение для каждого элемента Iterable. Тогда каждый элемент сравнивается на основе возвращаемого значения этой функции, а не указанным элементом (поведение по умолчанию).

Вот пример:

lst = [2, 4, 8, 16]

def inverse(val):
   return -val

print(max(lst))
# 16

print(max(lst, key=inverse))
# 2

Мы определяем функцию обратной (), которая возвращает значение, умноженное на -1. Теперь мы печатаем два выполнения функции MAX (). Первый – это выполнение по умолчанию: максимум списка [2, 4, 8, 16] составляет 16. Второй использует ключ. Мы указываем «обратное» как функцию ключа. Python применяет эту функцию ко всем значениям [2, 4, 8, 16]. Это сравнивает эти новые значения друг с другом и возвращает максимум. Использование обратной функции Python делает следующие сопоставления:

Оригинальное значение Значение после обратного () применяется (основа для MAX ())
2 -2
4 -4
8 -8
16 -16

Python рассчитывает максимум на основе этих отображений. В этом случае значение 2 (с сопоставлением -2) является максимальным значением, потому что -2> -4> -8> -16.

Теперь давайте вернемся к начальному вопросу:

Как получить ключ с максимальным значением в словаре?

Мы используем тот же пример, что и выше. Словарь хранит доход от трех человек Иоанна, Мэри и Алиса. Предположим, вы хотите найти человека с самым высоким доходом. Другими словами, каков ключ с максимальным значением в словаре?

Теперь не путайте ключ словаря с дополнительным клавишным аргументом Макс () функция. У них ничего общего нет – это просто несчастное совпадение, которое у них есть то же имя!

От проблемы, мы знаем, что результат является ключом словаря. Итак, мы называем MAX () на ключах словаря. Обратите внимание, что Макс (доход. keys ()) такой же, как Макс (доход) Отказ Чтобы узнать больше о словарях, проверьте нашу статью Словарь Python – окончательное руководство Отказ

Однако мы хотим сравнить значения словаря, а не ключи. Мы будем использовать ключ аргумента Макс () сделать это. Мы должны пройти его функцию, но которая?

Чтобы получить значение «Анна» мы можем использовать нотацию кронштейна – Доход ['Anne'] Отказ Но нотация кронштейна не является функцией, так что не работает. К счастью, доход. Получить ('anne') делает (почти) так же, как Доход ['Anne'] И это функция! Единственное отличие в том, что он возвращает Нет Если они ключ нет в словаре. Итак, мы передадим это к ключевому аргументу Макс () Отказ

income = {'Anne' : 1111,
          'Bert' : 2222,
          'Cara' : 9999999}

print(max(income, key=income.get))
# Cara

Как получить ключ с минимальным значением в словаре?

Если вы поняли предыдущий фрагмент кода, это будет легко. Чтобы найти ключ минимальным значением в словаре, мы используем функцию min ().

income = {'Anne' : 1111,
          'Bert' : 2222,
          'Cara' : 9999999}

print(min(income, key=income.get))
# Anne

Единственное отличие состоит в том, что мы используем встроенную функцию Min () вместо встроенной функции MAX (). Вот и все.

Похожие учебники

  • Как получить ключ с минимальным значением в словаре?

Найдите ключ с максимальным значением в словаре – альтернативные методы

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

В оформлении Ответ в Stackoverflow , пользователь по сравнению с девятью (!) различными способами найти ключ с максимальным значением в словаре. Вот они:

# Convert to lists and use .index(max())
def f1(): 
    v=list(income.values())
    k=list(income.keys())
    return k[v.index(max(v))]

# Dictionary comprehension to swap keys and values
def f2():
   d3={v:k for k,v in income.items()}
   return d3[max(d3)]

# Use filter() and a lambda function
def f3():
   return list(filter(lambda t: t[1]==max(income.values()), income.items()))[0][0]   

# Same as f3() but more explicit
def f4():
   m=max(income.values())
   return list(filter(lambda t: t[1]==m, income.items()))[0][0] 
      
# List comprehension
def f5():
   return [k for k,v in income.items() if v==max(income.values())][0]  
 
# same as f5 but remove the max from the comprehension
def f6():
   m=max(income.values())
   return [k for k,v in income.items() if v==m][0]   
    
# Method used in this article
def f7():
   return max(income,key=income.get)    

# Similar to f1() but shortened to 2 lines
def f8():
    v=list(income.values())
    return list(income.keys())[v.index(max(v))] 
  
# Similar to f7() but use a lambda function
def f9():
    return max(income, key=lambda k: income[k])    

print(f1())
print(f2())
print(f3())
print(f4())
print(f5())
print(f6())
print(f7())
print(f8())
print(f9())
# Cara (all outputs)

В оформлении ориентир Выполненные в большом словаре пользователя Stackoverflow, F1 () оказался самым быстрым.

Таким образом, второй лучший способ получить ключ с максимальным значением из словаря:

income = {'Anne' : 1111,
          'Bert' : 2222,
          'Cara' : 9999999}

v=list(income.values())
k=list(income.keys())
print(k[v.index(max(v))])
# Cara

Найти ключ с самым длинным значением в словаре

Мы знаем, как найти максимальное значение, если значения номера. Как насчет ли они списков или строки?

Допустим, у нас есть словарь, который записывает количество дней, которые каждый человек работал в этом месяце. Если они работали в день, мы добавляем 1 к списку этого человека. Если они не работали, мы ничего не делаем. В конце месяца наш словарь выглядит так.

days_worked = {'Anne': [1, 1, 1, 1],
               'Bert': [1, 1, 1, 1, 1, 1],
               'Cara': [1, 1, 1, 1, 1, 1, 1, 1]}

Общее количество рабочих дней сработало каждый месяц, – это длина каждого списка. Если все элементы из двух списков одинаковы (как есть здесь), они сравниваются на основе их длины.

# Length 2 is less than length 4
>>> [1, 1] < [1, 1, 1, 1]
True

Таким образом, мы можем использовать тот же код, который мы использовали в статье, чтобы найти ключ с максимальным значением.

>>> max(days_worked, key=days_worked.get)
'Cara'

Если мы обновим наш словарь, так что Bert работал в большинстве дней и снова примените макс (), Python возвращает «Bert».

>>> days_worked = {'Anne': [1, 1, 1, 1],
                   'Bert': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                   'Cara': [1, 1, 1, 1, 1, 1, 1, 1]}

# Bert has now worked the most
>>> max(days_worked, key=days_worked.get)

Найти ключ с максимальным значением в списке словарей

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

income1 = {'Anne': 1111,
           'Bert': 2222,
           'Cara': 3333}

income2 = {'Dani': 4444,
           'Ella': 5555,
           'Fred': 6666}

income3 = {'Greg': 7777,
           'Hope': 8888,
           'Igor': 999999999999}

list_of_dicts = [income1, income2, income3]

Мы видим, что «Игорь» имеет самый высокий доход, поэтому мы ожидаем, что его возвращено.

Есть несколько способов сделать это. Самое простое состоит в том, чтобы поставить все пары клавишных пар в один словарь с использованием контура для цикла. Затем мы называем max () как обычно.

# Initialise empty dict
>>> big_dict = {}

# Use for loop and .update() method to add the key-value pairs
>>> for dic in list_of_dicts:
        big_dict.update(dic)

# Check the result is as expected
>>> big_dict
{'Anne': 1111,
'Bert': 2222,
'Cara': 3333,
'Dani': 4444,
'Ella': 5555,
'Fred': 6666,
'Greg': 7777,
'Hope': 8888,
'Igor': 999999999999}

# Call max() and specify key argument
>>> max(big_dict, key=big_dict.get)
'Igor' 

Куда пойти отсюда?

Каждый мастер Python должен знать основы. Улучшение вашего базового кодового понимания навыков на 20% улучшит вашу производительность намного больше всего на свете. Почему? Потому что все остальное основывается на основах.

Но большинство материальных онлайн утомительно и скучно. Вот почему я написал новый и захватывающий способ изучения Python, при этом измеряя и сравнивая свои навыки против других кодеров. Проверьте книгу «Кофе-брейк Python». Это LeanPub 2019 Bestseller в категории Python!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.