字典分解并创建具有相同值的新字典

dictionary decomposition and creating a new dictionary with identical values

我有字典myDict

{'1': 5, '2': 13, '3': 23, '4': 17}

我正在使用这段代码,它对我很有帮助,以便在 myDict 中找到最接近 targetVal

的 key/value
answer = key, value = min(myDict.items(), key=lambda (_, v): abs(v - targetVal))

假设 targetVal14, answer returns:

('2': 13)

我现在需要做的是处理 myDict 中的相同值。例如,如果 myDict 现在是:

{'1': 5, '2': 13, '3': 23, '4': 13}

我需要值 13 的 key/value 对。 如果代码(上面)在 myDict 中找到最接近的值,并且该值恰好出现不止一次,我想创建一个新字典。在这种情况下,answer 会 return:

{'2': 13, '4': 13}

是否可以更新找到 answer 的方式,以解决最接近的值出现不止一次的情况?

先找到最小值,然后过滤你的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}

如您所见,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}