说我有这样的字典:
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'
关于如何解决这个问题的任何提示?
说我有这样的字典:
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'
关于如何解决这个问题的任何提示?
target = 3.19
key, value = min(dict.items(), key=lambda (_, v): abs(v - target))
你可以这样做:
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]
如果两个值离目标同样远,不确定你想要它做什么,但如果这是一个问题,你可以使用这样的东西
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]
您可以执行以下操作:
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