字典分解并创建具有相同值的新字典
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))
假设 targetVal
是 14
, 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}
我有字典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
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}