Python:从value中获取对应的key

Python: get the corresponding key from value

def get_nearest_less_element(d, k):
    return (min(value for value in map(float, d.values()) if value >= k))

所以,d 是 dict()kfloat,这个函数 return 给我正确的值,但是我可以 return此函数中该值的对应键?

def get_nearest_less_element(d, k):
    return min(key for key, value in d.items() if float(value) >= k)

不是使用 dict.values() 遍历值,而是使用 dict.items() 遍历键和值,这会产生 (key, value) 对。

def get_nearest_less_element(d, k):
    return min(key for key, value in d.items() if float(value) >= k)

如果密钥是你想要的:

def get_nearest_less_element(dict_obj, threshold):
    min_value, min_key = min(
        ((value, key) for key, value in dict_obj.items() if float(value) < threshold),
        key=lambda value_key: float(value_key[0])
    )
    print('min_value =', min_value, ', min_key =', min_key)
    return min_key

基本上,我所做的与@MrRobot9 类似,但我根据值对 (value, key) 对进行了排序。请注意,因为我把值放在键之前,所以排序将基于值,所以不需要 key= 部分,但我只是把它放在那里更明确。

如果您想 return 邻居的 ,请考虑以下解决方案:

def get_nearest_less_element2(d, k):
    dict_nearest = {value:key for key,value in d.items() if value >= float(k)}
    nearest_index = min(dict_nearest)
    nearest_value = dict_nearest[nearest_index]
    return nearest_index, nearest_value

此外,通过以下简单测试,您可以检查从旧函数和新函数获得的结果是否等效:

d={1:11, 100:333, 40:44, 9:21, 4:99, 88:31, 7:77}
test_res = []

for k in range(0, 100, 5):
    test_res.append(get_nearest_less_element(d,k) == get_nearest_less_element2(d,k)[0])

print(all(test_res))
# True