加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Python字典中查找最接近的值并返回其键

发布时间:2020-12-20 11:07:44 所属栏目:Python 来源:网络整理
导读:我有一个价值 value = 0.04532 还有一个类似的字典 {'1': 0.02827,'2': 0.0,'3': 0.09827,'4': 0.04533} 我想简单地返回字典中最接近原始值的值的键,在这种情况下为4 我找到了一个类似这样的老帖子 newValue = valueanswer = min(dict.items(),key=lambda (_
我有一个价值

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,'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]显式提取第一个值的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读