dict.items
дает вам пары (ключ, значение) словаря.
>>> d = {'1': 0.02827, '2': 0.0, '3': 0.09827, '4': 0.04533}
>>> d.items()
dict_items([('1', 0.02827), ('3', 0.09827), ('2', 0.0), ('4', 0.04533)])
Возвращаемое значение является итеративным и, следовательно, может быть передано min
.
min
также принимает ключевое слово аргумента key
, которое должно вызываться (обычно это функция).Это критерий, по которому min
оценивает элементы по первому аргументу, чтобы найти минимум.
Вот гораздо более простой пример.Предположим, нам нужно найти самый короткий список в списке списков.
>>> lists = [[1, 2], [1, 2, 3], [5]]
>>> min(lists, key=len)
[5]
min
выполняет итерации по lists
, вызывает len(sublist)
для каждого sublist
в lists
и возвращает элемент, гдеlen(sublist)
было минимальным.
Рассматривая предлагаемое решение,
lambda (_, value): abs(value - newValue)
является (анонимной) функцией (с использованием Распаковка параметров кортежа , которая больше не работает в Python3) должен взять элемент, пару (ключ, значение) и вернуть abs(value - newValue)
, который измеряет, насколько близко value
к newValue
.
Если lambda
смущает вас, воткак бы вы написали эту функцию key
в Python 3 как обычную функцию.
>>> def criterion(dict_item):
... key, value = dict_item # unpack
... return abs(value - newValue)
Теперь вы можете выдать
>>> newValue = 0.04532
>>> d = {'1': 0.02827, '2': 0.0, '3': 0.09827, '4': 0.04533}
>>>
>>> min(d.items(), key=criterion)
('4', 0.04533)
Если вы хотите, чтобы ключ был целым числом, получитеэто из индекса 0
и превратить его в int
.
>>> int(min(d.items(), key=criterion)[0])
4
Наконец, не используйте имя переменной dict
, это имя должно быть зарезервировано для встроенного типа словаря.