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

如何高效重排字典键值对?(附示例)

高效转换统计字典结构的方法

问题描述

现有如下统计字典,键为指标类型(TP/FP/FN),对应值为各分类的统计结果:

current_dict = {
    'TP': {'class_A': 100, 'class_B': 200, 'class_C': 300},
    'FP': {'class_A': 50, 'class_B': 60, 'class_C': 70},
    'FN': {'class_A': 10, 'class_B': 20, 'class_C': 30}
}

需要将结构转换为以分类为顶层键,每个分类对应其所有指标的统计值,期望输出如下:

desired_dict = {
    'class_A': {'TP': 100, 'FP': 50, 'FN': 10},
    'class_B': {'TP': 200, 'FP': 60, 'FN': 20},
    'class_C': {'TP': 300, 'FP': 70, 'FN': 30}
}

原实现通过提前构建默认结构+大量if匹配更新,效率低下,需要更高效的分组转换方法。

解决方案

方法1:字典推导式(简洁高效)

利用Python的字典推导特性,直接按分类分组:

desired_dict = {
    cls: {metric: current_dict[metric][cls] for metric in current_dict}
    for cls in current_dict['TP']
}

逻辑说明:

  • 所有指标下的分类键完全一致,因此直接从TP的键中获取所有分类列表
  • 对每个分类,遍历所有指标类型,取出对应统计值并构建子字典
  • 时间复杂度O(n),无冗余判断,代码简洁易读

方法2:collections.defaultdict(适配复杂场景)

如果存在分类不统一的情况(比如部分指标缺少某个分类),用defaultdict自动处理分组:

from collections import defaultdict

desired_dict = defaultdict(dict)
for metric, cls_data in current_dict.items():
    for cls, value in cls_data.items():
        desired_dict[cls][metric] = value

# 若需转为普通字典,执行:desired_dict = dict(desired_dict)

逻辑说明:

  • 遍历每个指标下的分类数据,直接将值映射到对应分类的指标键下
  • 自动为不存在的分类创建空字典,无需提前构建结构
  • 同样是O(n)时间复杂度,兼容性更强

两种方法均无需冗余的if判断,比原实现效率提升明显,且代码更易维护。

内容的提问来源于Stack Exchange,提问作者blah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:45:41