Самый чистый способ распечатать максимальное значение и его ключ из словаря

Я получаю наивысшее значение и соответствующее ему значение из словаря и распечатываю его для пользователя.

Несмотря на то, что это работает, мне интересно, делаю ли я это самым чистым способом. Вот:

People = {'Harry': 20, 'Ron': 19, 'Hermione': 21, 'Hagrid': 54}

print(max(People, key=People.get), max(People.values()))

# Result: Hagrid 54

Что бы вы сделали иначе?

2 ответа
2

Что бы вы сделали иначе?

  • PEP 8: Имена переменных должны быть в нижнем регистре. People -> people.

  • Как предложил @FMc в комментарии, лучше разделить вычисление и печать. Легче понять и изменить.

  • Альтернативой (которую я считаю более читаемой) является использование лямбды в max функция и потом распаковать кортеж:

    people = {'Harry': 20, 'Ron': 19, 'Hermione': 21, 'Hagrid': 54}
    entry = max(people.items(), key=lambda x: x[1])
    print(*entry)
    # Result: Hagrid 54
    

    Или распаковываем напрямую:

    key, value = max(people.items(), key=lambda x: x[1])
    print(key, value)
    # Result: Hagrid 54
    

Редактировать:

С использованием operator.itemgetter, как предлагается в комментариях:

import operator

people = {'Harry': 20, 'Ron': 19, 'Hermione': 21, 'Hagrid': 54}
key, value = max(people.items(), key=operator.itemgetter(1))
print(key, value)
# Result: Hagrid 54

  • 2

    Более читабельный — и, вероятно, более эффективный, поскольку мы вызываем только max() однажды здесь.

    — Тоби Спейт

  • я знал sort имел key параметр, но не знал max это тоже было. Узнавайте что-то новое каждый день.

    — Марк Рэнсом

Я не знаю, какова ваша ценность, поэтому предполагаю возраст.

Поскольку у вас уже есть готовая реализация, этого достаточно. Я думаю, что просто обертывание кода функцией повысит читаемость вашего кода. Таким образом, вы предоставляете описательный API для функциональности. Затем вы можете повторно использовать это в нескольких местах и ​​изменить реализацию по своему усмотрению.

Тогда реализация становится «деталью реализации» и не имеет ничего общего с чистейшим способом. Так что вам не придется выяснять, что max в print(max) делает каждый раз, когда вы читаете код. Независимо от того, насколько хорошо вы можете сделать max смотрите, функция всегда будет читабельнее. Когда вы читаете код, вы читаете его так:

вход макс от людей с ключом входа [1]. Хорошо, вы получаете запись с максимальным значением, что бы это ни значило

print(oldestPerson(People))

Как вы реализуете oldestPerson() на самом деле не имеет значения, и вы сможете реорганизовать его, как захотите, позже.

  • 1

    @Peilonrayz, ваша редакция значительно обогатила ответ. Большое спасибо за это и за разъяснения.

    — Арнон Де Паула

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *