我有一个价值
value = 0.04532
还有一个类似的字典
{'1': 0.02827, '2': 0.0, '3': 0.09827, '4': 0.04533}
我想简单地返回字典中最接近原始值的值的键,在这种情况下为4
我找到了一个类似这样的老帖子
newValue = value
answer = min(dict.items(), key=lambda (_, value): abs(value - newValue))
这将返回元组(‘4’,0.04533),我只想要键(作为int).
此外,我无法理解代码正在做什么.
有没有更简洁的方法来完成这项工作?
最佳答案 您可以使用序列解包来解压缩元组结果:
value = 0.04532
d = {'1': 0.02827, '2': 0.0, '3': 0.09827, '4': 0.04533}
res_key, res_val = min(d.items(), key=lambda x: abs(value - x[1]))
print(res_key, res_val, sep=', ')
4, 0.04533
问题的一半似乎出现在您选择的变量中.确保不影响类名,例如叫你的字典d,而不是字典.同样,不要将lambda的参数命名为与已定义的变量相同的参数.
否则,逻辑via min的工作原理如下:
>从d.items中提取每个元组,即键值对.
>将函数lambda x:abs(value – x [1])应用于每个元组,即计算绝对差值与值.
>计算lambda函数的最小结果并返回提供的参数,在本例中为d.items中的单个元组.
注意PEP 3113从Python 3.x中删除了元组参数解包,这就是我们必须在lambda中通过x [1]显式提取第一个值的原因.