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

如何移除嵌套字典中的多余中间层级?

移除字典中的冗余嵌套层级

问题描述

我有如下嵌套字典:

dictionary = {(0,'AAPL'): {0: {'v': 55478991.0,
                               'vw': 145.868,
                               'o': 146.83,
                               'c': 145.31,
                               'h': 147.2285,
                               'l': 145.01,
                               't': 1677646800000,
                               'n': 461613}}}

需要移除中间冗余的层级(中间字典的键始终为0),将内层数据直接关联到最外层的键,得到:

dictionary = {(0,'AAPL'): {'v': 55478991.0,
                           'vw': 145.868,
                           'o': 146.83,
                           'c': 145.31,
                           'h': 147.2285,
                           'l': 145.01,
                           't': 1677646800000,
                           'n': 461613}}

同时需要批量处理多个类似结构的字典,示例如下:

{
 (0,'LHDX'): {0: {'v': 194946367.0,
   'vw': 1.123,
   'o': 1.04,
   'c': 0.7901,
   'h': 1.45,
   'l': 0.7321,
   't': 1677646800000,
   'n': 373039}},
 (1,'LHDX'): {0: {'v': 45745084.0,
   'vw': 0.6214,
   'o': 0.7133,
   'c': 0.56,
   'h': 0.7496,
   'l': 0.5156,
   't': 1677733200000,
   'n': 61922}},
 (2,'BBBY'): {0: {'v': 38914452.0,
   'vw': 1.4392,
   'o': 1.53,
   'c': 1.39,
   'h': 1.54,
   'l': 1.39,
   't': 1678078800000,
   'n': 77211}}
}

解决方案

方法1:字典推导式(推荐)

直接生成无冗余层级的新字典,代码简洁高效:

original_dict = {
 (0,'LHDX'): {0: {'v': 194946367.0, 'vw': 1.123, 'o': 1.04, 'c': 0.7901, 'h': 1.45, 'l': 0.7321, 't': 1677646800000, 'n': 373039}},
 (1,'LHDX'): {0: {'v': 45745084.0, 'vw': 0.6214, 'o': 0.7133, 'c': 0.56, 'h': 0.7496, 'l': 0.5156, 't': 1677733200000, 'n': 61922}},
 (2,'BBBY'): {0: {'v': 38914452.0, 'vw': 1.4392, 'o': 1.53, 'c': 1.39, 'h': 1.54, 'l': 1.39, 't': 1678078800000, 'n': 77211}}
}

cleaned_dict = {key: value[0] for key, value in original_dict.items()}

遍历原字典的每个键值对,将每个值对应的0键内容直接作为新值,一步完成转换。

方法2:原地修改原字典

如果不需要保留原字典,可直接在原字典上修改:

for key in original_dict:
    original_dict[key] = original_dict[key][0]

遍历每个键,把对应的值替换为其内部0键指向的字典。

方法3:批量处理多个字典

将转换逻辑封装成函数,方便处理多个独立字典:

def clean_redundant_level(d):
    return {key: val[0] for key, val in d.items()}

# 示例使用
dict1 = {(0,'AAPL'): {0: {'v': 55478991.0, 'vw': 145.868, 'o': 146.83, 'c': 145.31, 'h': 147.2285, 'l': 145.01, 't': 1677646800000, 'n': 461613}}}
dict2 = {(0,'LHDX'): {0: {'v': 194946367.0, 'vw': 1.123, 'o': 1.04, 'c': 0.7901, 'h': 1.45, 'l': 0.7321, 't': 1677646800000, 'n': 373039}}}

cleaned_dict1 = clean_redundant_level(dict1)
cleaned_dict2 = clean_redundant_level(dict2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:23:21