import pandas as pd def format_weight(weight: dict, to=1) -> dict: """ 对权重的小数点进行截取,到指定权重 @param weight: @param to: 指定权重 @return: """ weight_series = pd.Series(weight) weight_series = weight_series.fillna(0) minidx = weight_series[weight_series > 0].idxmin() maxidx = weight_series.idxmax() weight_series = weight_series.apply(lambda x: round(x, 2)) if weight_series.sum() == to: return dict(weight_series) elif weight_series.sum() < to: weight_series[minidx] += to - weight_series.sum() elif weight_series.sum() > to: weight_series[maxidx] += to - weight_series.sum() return dict(weight_series.apply(lambda x: round(float(x), 2))) if __name__ == '__main__': print(format_weight({19: 0.13, 27: 0.17, 56: 0.36}))