我有一本字典myDict
{'1': 5, '2': 13, '3': 23, '4': 17}
我正在使用这段代码,该代码对我很有帮助,以便在myDict
中找到最接近targetVal
的键/值
answer = key, value = min(myDict.items(), key=lambda (_, v): abs(v - targetVal))
假设targetVal
为14
,则answer
返回:
('2': 13)
我现在需要做的是处理myDict
中相同的值。例如,如果myDict
现在是:
{'1': 5, '2': 13, '3': 23, '4': 13}
我需要这两个键/值对都带有值13
。
在代码(上方)在myDict
中找到最接近的值并且该值碰巧出现多次的情况下,我想创建一个新的字典。在这种情况下,answer
将返回:
{'2': 13, '4': 13}
当最接近的值出现多次时,是否可以更新发现answer
的方式来说明实例?
答案 0 :(得分:3)
先找到最小值,然后过滤dict
。
>>> d = {'1': 5, '2': 13, '3': 23, '4': 13}
>>> target = 13
>>> min_ = min(d.itervalues(), key=lambda v: abs(v - target))
>>> {k:v for k,v in d.iteritems() if v == min_}
{'2': 13, '4': 13}
答案 1 :(得分:2)
您发现,min
仅提供一项满足最低条件的物品。您可以通过手动循环构建单程解决方案:
from math import inf
myDict = {'1': 5, '2': 13, '3': 23, '4': 13}
targetVal = 14
res = {}
diff = inf
for k, v in myDict.iteritems():
current_diff = abs(v - targetVal)
if current_diff <= diff:
if current_diff < diff:
diff = current_diff
res.clear()
res.update({k: v})
print(res)
# {'2': 13, '4': 13}