我想规范化python字典的值,同时为每个值保持一个下限,其中下限由1/(10*n)给出,其中n是字典中的值数。
字典d的值可以规范化如下。
from __future__ import division
d = {1:0.5, 2: 1.5, 3: 2.0, 4: 0.02, 5: 3.1}
total = sum(d.values())
d = {k: v / total for k, v in d.iteritems()}
print d
这种情况下的下限是0.02
lb = 1 / (10 * len(d.keys()))
print lb
有些值小于标准化后的下限。问题是,如果我将值设置为小于lb到lb,则值之和将大于1。以下方法不起作用
D = dict(zip(d.keys(),[lb if i/total < lb else i/total for i in d.values()]))
print sum(D.values())
我们需要一种方法来反复规范化和设置lb,直到所有值都大于lb并且值之和为1。Python的方法可以解决这个问题吗?