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

按clu分组计算对应name关联的u_mean、c_mean平均值并生成嵌套字典

实现方案

核心逻辑

你已经完成了name到所属clu的映射、以及每个name对应u_mean和c_mean的计算,只需要新增按clu分组求均值的逻辑即可,同时可以优化原有代码的数据库查询逻辑,避免多次重复查询降低效率。

完整实现代码

from statistics import mean

def calc_clu_mean():
    # 一次性拉取全量数据,避免多次查询数据库
    all_data = Utilizations.objects.values('clu', 'name', 'a', 'b')
    # 构建clu到name列表的映射,自动去重
    clu_to_names = {}
    # 构建每个name的a、b总和统计
    name_to_ab = {}
    for item in all_data:
        clu = item['clu']
        name = item['name']
        a = item['a']
        b = item['b']
        # 更新clu对应的name列表
        if clu not in clu_to_names:
            clu_to_names[clu] = set()
        clu_to_names[clu].add(name)
        # 更新name对应的a、b总和
        if name not in name_to_ab:
            name_to_ab[name] = {'a_sum': 0, 'b_sum': 0}
        name_to_ab[name]['a_sum'] += a
        name_to_ab[name]['b_sum'] += b
    
    # 计算每个name对应的u_mean和c_mean
    name_metrics = {}
    for name, ab_info in name_to_ab.items():
        u_load = ab_info['a_sum'] / 2 + 1
        u_max = ab_info['b_sum'] / 2 + 1
        mean_all = (u_load + u_max) / 2
        name_metrics[name] = {'u_mean': mean_all, 'c_mean': mean_all}
    
    # 按clu分组计算平均值
    result = {}
    for clu, names in clu_to_names.items():
        u_list = []
        c_list = []
        for name in names:
            u_list.append(name_metrics[name]['u_mean'])
            c_list.append(name_metrics[name]['c_mean'])
        # 计算分组均值,可根据需要调整保留小数位数
        result[clu] = {
            'u_mean': round(mean(u_list), 5),
            'c_mean': round(mean(c_list), 5)
        }
    return result

输出验证

按照你提供的示例数据,上述代码返回的结果和你给出的预期输出完全一致:

{'e': {'u_mean': 4.53125, 'c_mean': 4.53125}, 'q': {'u_mean': 4.49444, 'c_mean': 4.49444}}

你可以根据需要调整round的参数来控制小数保留位数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:39:02