10

说我有这样的字典:

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'

关于如何解决这个问题的任何提示?

4

5 回答 5

8

采用min(iter, key=...)

target = 3.19
key, value = min(dict.items(), key=lambda (_, v): abs(v - target))
于 2013-08-12T22:03:46.023 回答
2

你可以这样做:

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]
于 2013-08-12T22:02:08.817 回答
1

如果两个值离目标同样远,不确定你想要它做什么,但如果这是一个问题,你可以使用这样的东西

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]
于 2013-08-12T23:12:17.167 回答
1

对于 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]
于 2018-09-14T01:28:50.980 回答
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
于 2013-08-12T22:14:54.867 回答