Я получаю наивысшее значение и соответствующее ему значение из словаря и распечатываю его для пользователя.
Несмотря на то, что это работает, мне интересно, делаю ли я это самым чистым способом. Вот:
People = {'Harry': 20, 'Ron': 19, 'Hermione': 21, 'Hagrid': 54}
print(max(People, key=People.get), max(People.values()))
# Result: Hagrid 54
Что бы вы сделали иначе?
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
Я не знаю, какова ваша ценность, поэтому предполагаю возраст.
Поскольку у вас уже есть готовая реализация, этого достаточно. Я думаю, что просто обертывание кода функцией повысит читаемость вашего кода. Таким образом, вы предоставляете описательный API для функциональности. Затем вы можете повторно использовать это в нескольких местах и изменить реализацию по своему усмотрению.
Тогда реализация становится «деталью реализации» и не имеет ничего общего с чистейшим способом. Так что вам не придется выяснять, что max
в print(max)
делает каждый раз, когда вы читаете код. Независимо от того, насколько хорошо вы можете сделать max
смотрите, функция всегда будет читабельнее. Когда вы читаете код, вы читаете его так:
вход макс от людей с ключом входа [1]. Хорошо, вы получаете запись с максимальным значением, что бы это ни значило
print(oldestPerson(People))
Как вы реализуете oldestPerson()
на самом деле не имеет значения, и вы сможете реорганизовать его, как захотите, позже.
Более читабельный — и, вероятно, более эффективный, поскольку мы вызываем только
max()
однажды здесь.— Тоби Спейт
я знал
sort
имелkey
параметр, но не зналmax
это тоже было. Узнавайте что-то новое каждый день.— Марк Рэнсом