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

如何高效移除嵌套字典中值小于同键其他值的键值对?

高效移除嵌套字典中值非全局最大的键值对

需求说明

移除嵌套字典中,值小于该键在其他子字典中对应值的键值对——仅保留每个全局键(如I1、I2)在所有子字典中的最大值对应的键值对。

示例输入

ex_dict = {'C1': {'I1': 1, 'I2': 1.5, 'I3': 2}, 
           'C2': {'I2': 2, 'I3': 3, 'I4': 3.5}, 
           'C3': {'I4': 2, 'I5': 4, 'I6': 3}, 
           'C4': {'I1': 2, 'I3': 3.5, 'I6': 5}, 
           'C5': {'I7': 1, 'I8': 1.5, 'I9': 2}}

期望输出

new_ex_dict = {'C1': {}, 'C2': {'I2': 2, 'I4': 3.5}, 'C3': {'I5': 4}, 'C4': {'I1': 2, 'I3': 3.5, 'I6': 5}, 'C5': {'I7': 1, 'I8': 1.5, 'I9': 2}}

高效实现方案

核心思路是先预计算所有全局键的最大值,再批量过滤子字典,避免重复遍历,将时间复杂度控制在线性级别。

步骤1:预计算全局键的最大值

遍历所有子字典,记录每个全局键对应的最大数值:

# 构建全局键-最大值映射
global_max = {}
for sub_dict in ex_dict.values():
    for key, val in sub_dict.items():
        # 若键不存在或当前值更大,则更新最大值
        if key not in global_max or val > global_max[key]:
            global_max[key] = val

步骤2:过滤子字典生成结果

遍历原嵌套字典,仅保留子字典中值等于对应全局最大值的键值对:

# 生成目标字典
new_ex_dict = {
    parent_key: {
        key: val for key, val in sub_dict.items()
        if val == global_max[key]
    }
    for parent_key, sub_dict in ex_dict.items()
}

验证结果

执行代码后,打印new_ex_dict即可得到期望输出。

效率说明

该方案的时间复杂度为O(M),其中M是所有嵌套键值对的总数——仅需两次线性遍历:一次统计最大值,一次过滤子字典。相比每次检查键值对都遍历所有子字典的O(M*N)(N为父字典条目数),在数据规模较大时效率提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:50:22