如何在字典中找到最接近但不超过变量的值的键?

时间:2017-10-27 04:11:08

标签: python dictionary

假设我有一本字典,d。

d = {"x": 4, "r" : 9, "p" : 18, "v" : 20}

我有一个变量,我。如何找到最接近但不超过i?

的值的键

例如,如果i为5,则函数将返回“x”,但如果i为19,则函数将返回“p”。

我唯一能想到的就是使用for循环。

2 个答案:

答案 0 :(得分:0)

这样的事情会起作用:

d = {'a': 2, 'b': 1, 'c': 4}
x = 2

# subtract from all values
for k, v in d.items():
    d[k] = v - x

# get the key with the largest value
largest = max(d, key=lambda k: d[k])

假设您正在对所有值应用整数偏移(在这种情况下为减法),则最大键在减法之前和之后都是相同的,因此它没有区别

编辑:

对于修改后的问题,请尝试以下方法:

d = {"x": 4, "r" : 9, "p" : 18, "v" : 20}
x = 19
closest = min(d, key=lambda k: abs(d[k] - x))  # returns 'p'

它只返回x与您的值之间的差值最小的键。但是,我不确定您希望如何处理多个键符合您标准的情况

你提到了一个功能,而不是它需要作为一个内衬,但它很容易转换上面的内容:

def find_closest(d, x):
    return min(d, key=lambda k: abs(d[k] - x))

closest = find_closest(d, 8)  # 'r'

答案 1 :(得分:0)

您可以使用词典理解来生成一个不含x的新词典,只需一行代码。

my_dict = {'one' : 1, 'two' :2, 'five' : 5, 'three' : 3}
bad = 5

output = {k: v for k, v in my_dict.items() if v != bad}

print( max(output.values()) )

Here it is in action