У меня есть словарь со значениями времени в качестве ключей, и мне нужно получить значение, связанное с этими ключами.Природа моей программы означает, что я почти никогда не смогу вызвать словарь с точным, существующим ключом, поэтому я хочу сделать следующее: я хочу передать случайное входное значение в словарь и для словарячтобы найти ключ, который находится ближе всего, НО меньше, чем входное значение, а затем дайте мне значение, связанное с этим ключом.
До сих пор я пробовал лямбда-выражение, которое должно найти ближайший ключ ниже, чемввод, но когда я выполняю его, я обнаруживаю, что он не дает мне ожидаемого значения.Поскольку мой настоящий код довольно длинный и сложный, я создал небольшую тестовую программу для более четкого наблюдения за своими результатами:
import random as r
my_dict = {0.0: 0, 1.0: 1, 2.0: 2, 3.0: 3, 4.0: 4, 5.0: 5}
value = round(r.uniform(0, 5), 1)
print('Random Value is: ' + str(value))
dict_value = my_dict[min(my_dict, key=lambda x:abs(x-value))]
print('Corresponding Dictionary Value is: ' + str(dict_value))
Эта программа успешно генерирует случайное значение с плавающей запятой, округленное до одного десятичного знака.Когда он передает его в лямбда-функцию, он не дает точного значения в ответ.Например, если случайное значение равно 7,7, соответствующее значение словаря возвращает 3 (что неверно), случайное значение 3,1 возвращает 3 (это правильно), 4,7 возвращает 5 (неправильно) и т. Д. Я могу понять, почемуэто происходит, так как я вычитаю свое значение из x, которое сравнило бы разницу двух чисел с каждым ключом.Также нет ничего, что указывало бы, что ближайший ключ должен быть ниже, чем ввод, только чтобы найти ближайший ключ к вводу в целом, но я не уверен, как это реализовать.Я надеюсь, что я был ясен, но, пожалуйста, задавайте вопросы, если нет.Спасибо!