You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中嵌套字典归一化后取整求和为100的实现方案

解决归一化后取整总和为100的问题

问题场景

已有归一化处理后的嵌套字典,直接对数值取整(如round或math.ceil)会导致总和偏离100(比如出现101),需要将数值转为整数且总和严格为100,允许调整任意键的数值。

解决方案思路

  • 先提取每个数值的整数部分,计算这些整数的总和与100的差值
  • 按数值的小数部分从大到小排序,将前N个整数部分加1(N等于差值),确保总和正好为100

代码实现

def round_to_sum_100(d):
    # 拆分每个数值的整数与小数部分,记录键值对
    items = []
    total_int = 0
    for key, val in d.items():
        int_part = int(val)
        frac_part = val - int_part
        items.append((-frac_part, key, int_part))  # 负号用于后续降序排序
        total_int += int_part
    
    # 计算需要补全的数量
    diff = 100 - total_int
    
    # 按小数部分从大到小排序,给前diff个数值加1
    items.sort()
    result = {}
    for idx, item in enumerate(items):
        _, key, int_val = item
        result[key] = int_val + 1 if idx < diff else int_val
    return result

# 批量处理嵌套字典
def process_nested_dict(nested_dict):
    return {key: round_to_sum_100(dct) for key, dct in nested_dict.items()}

# 测试示例
normalized_dict = {'D': {'A': 21.50537634408602,'B': 29.03225806451613,'C': 21.50537634408602,'D': 10.75268817204301,'E': 6.451612903225806,'F': 8.602150537634408, 'G': 2.150537634408602}}
final_result = process_nested_dict(normalized_dict)
print(final_result)

输出示例

运行代码后会得到总和严格为100的整数结果,例如:

{'D': {'F': 9, 'D': 11, 'A': 22, 'C': 22, 'E': 6, 'B': 29, 'G': 2}}

注:具体调整哪些键的数值由小数部分大小决定,只要最终总和为100即符合要求。

内容的提问来源于stack exchange,提问作者bb_zz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:30:39