Как узнать какое значение из словаря ближе всего к указанному значению?

Например, у меня есть словарь:

scores = {'player_1': 20, 'player_2': 16, 'player_3': 25, 'player_4': 20}

Как узнать какое из его значений ближе всего к 21? Желательно сделать функцией


Ответы (4 шт):

Автор решения: Gladius
def nearest(d):
    res = sorted(d.values(), key=lambda x: abs(21 - x))
    ans = res[0]
    return ans


scores = {'player_1': 20, 'player_2': 16, 'player_3': 25, 'player_4': 20}

print(nearest(scores))
→ Ссылка
Автор решения: Danis
scores = {'player_1': 20, 'player_2': 16, 'player_3': 25, 'player_4': 20}
print(min(scores, key=lambda key:abs(scores[key]-21)))
→ Ссылка
Автор решения: Andy Pavlov

Добавлю еще вариант через сортировку. Таким образом будет первый еще и по алфавиту:

scores = {'player_1': 20, 'player_2': 16, 'player_3': 25, 'player_4': 20, 'a': 20}
print(sorted(scores, key=lambda k: (k, abs(scores[k] - 21)))[0])  # a
→ Ссылка
Автор решения: Stanislav Volodarskiy

Если совсем точно следовать постановке вопроса, то самое близкое значение отыскивается так:

@>>> scores = {'player_1': 20, 'player_2': 16, 'player_3': 25, 'player_4': 20}
@>>> print(min(scores.values(), key=lambda v: abs(v - 21)))
20
→ Ссылка