python dict,查找最接近x的值

python dict,查找最接近x的值,python,python-3.x,Python,Python 3.x,假设我有一个这样的口述: d = {'a': 8.25, 'c': 2.87, 'b': 1.28, 'e': 12.49} 我有一个价值 v = 3.19 我想说的是: x = "the key with the value CLOSEST to v" 这将导致 x = 'c' 关于如何处理此问题的任何提示?您可以这样做: diff = float('inf') for key,value in d.items(): if diff > abs(v-value):

假设我有一个这样的口述:

d = {'a': 8.25, 'c': 2.87, 'b': 1.28, 'e': 12.49}
我有一个价值

v = 3.19
我想说的是:

x = "the key with the value CLOSEST to v"
这将导致

x = 'c'
关于如何处理此问题的任何提示?

您可以这样做:

diff = float('inf')
for key,value in d.items():
    if diff > abs(v-value):
        diff = abs(v-value)
        x = key

print x
它给出了
'c'

您也可以使用
min
来执行此任务:

x = min(((key, abs(value-v)) for key,value in d.items()), key = lambda(k, v): v)[0]
使用


您可以执行以下操作:

d = {'a': 8.25, 'c': 2.87, 'b': 1.28, 'e': 12.49}
v,l = 3.19,float('inf')
for name,value in d.items():
    if abs(value-3.19) < l:
        l = value-3.19
        n = name
print n
d={'a':8.25,'c':2.87,'b':1.28,'e':12.49}
v、 l=3.19,浮动('inf')
对于名称,d.items()中的值:
如果abs(值-3.19)
不确定如果两个值与目标距离相等,您希望它做什么,但如果这是一个问题,您可以使用类似的方法

min_diff = min(abs(v - target) for v in d.values())
closest_keys = [k for k, v in d.items() if abs(v - target) == min_diff]
对于python3,请使用以下命令:

target = 3.19    
key, value = min(d.items(), key=lambda kv : abs(kv[1] - target))
如果只需要最接近目标的值的键:

value = min(d.items(), key=lambda kv : abs(kv[1] - target))[0]

Python 3。我认为iteritems()已被items()取代。确认?@jason:Yep,2的
.items()
被删除,2的
.iteritems()
被移动到
.items()
爱喇嘛-我是说lambdas.)这太棒了。谢谢如果我想得到“k”个最接近的键值对怎么办?@bot28使用
heapq.nsmallest
而不是
min
这绝对不能证明第二个循环是正确的。。。为什么不
l=float('inf')
?感谢您的反馈!你是对的,这可以用一个循环或lambda更容易地完成。此外,l=float('inf')更有意义。
value = min(d.items(), key=lambda kv : abs(kv[1] - target))[0]