如何移除嵌套字典中的多余中间层级?
移除字典中的冗余嵌套层级
问题描述
我有如下嵌套字典:
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
相关产品推荐
相关产品推荐

