yod*_*ish 11 python dictionary
我有一个价值
value = 0.04532
Run Code Online (Sandbox Code Playgroud)
另外,还有一本类似的字典
{'1': 0.02827, '2': 0.0, '3': 0.09827, '4': 0.04533}
Run Code Online (Sandbox Code Playgroud)
4在本例中,我只想返回字典中最接近原始值的值的键
我发现一个较旧的帖子做了类似的事情
newValue = value
answer = min(dict.items(), key=lambda (_, value): abs(value - newValue))
Run Code Online (Sandbox Code Playgroud)
这返回元组('4', 0.04533),我只想要键(作为 int)。此外,我无法理解该代码到底在做什么。
有没有更干净的方法来完成这项工作?
您可以使用序列解包来解包tuple结果:
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
Run Code Online (Sandbox Code Playgroud)
一半的问题似乎出在你对变量的选择上。确保你没有隐藏类名,例如调用你的字典d,而不是dict。同样,不要将参数命名为lambda与已定义的变量相同的名称。
否则,逻辑via的min工作原理如下:
d.items,即键值对。lambda x: abs(value - x[1])应用于每个元组,即计算与 的绝对差value。lambda并返回提供的参数,在本例中为单个 tuplefrom d.items。注意PEP 3113从 Python 3.x 中删除了元组参数解包,这就是为什么我们必须x[1]通过lambda.
| 归档时间: |
|
| 查看次数: |
9061 次 |
| 最近记录: |