映射嵌套字典并在 python 中更新它?

Mapping nested dictionary and upate it in python?

我有嵌套字典,想像这样对它求和:

{
"USA":{
    '008612':{
        'January':{
            'target':345,
            'achieved':0
        },
        'Febuary':{
            'target':305,
            'achieved':0
        },
        'March':{
            'target':345,
            'achieved':0
        },
    },
    '001232':{
        'January':{
            'target':245,
            'achieved':0
        },
        'Febuary':{
            'target':205,
            'achieved':0
        },
        'March':{
            'target':105,
            'achieved':0
        },
    }
    
},
"UK":{
    '008612':{
        'January':{
            'target':645,
            'achieved':0
        },
        'Febuary':{
            'target':505,
            'achieved':0
        },
        'March':{
            'target':445,
            'achieved':0
        },
    },
    '001232':{
        'January':{
            'target':745,
            'achieved':0
        },
        'Febuary':{
            'target':605,
            'achieved':0
        },
        'March':{
            'target':405,
            'achieved':0
        },
    }
    
}

}

需要这种类型的字典,总字典包含相同项目代码{008612}和相同月份的目标和实现的总和。例如,新添加的Total词典中应添加相同月份的相同项目代码:

{
 "Total":{
    '008612':{
        'January':{
            'target':990=345+645,
            'achieved':0=0+0
        },
        'Febuary':{
            'target':810,
            'achieved':0
        },
        'March':{
            'target':790,
            'achieved':0
        },
    },
    '001232':{
        'January':{
            'target':890,
            'achieved':0
        },
        'Febuary':{
            'target':810,
            'achieved':0
        },
        'March':{
            'target':510,
            'achieved':0
        },
    },
"USA":{
    '008612':{
        'January':{
            'target':345,
            'achieved':0
        },
        'Febuary':{
            'target':305,
            'achieved':0
        },
        'March':{
            'target':345,
            'achieved':0
        },
    },
    '001232':{
        'January':{
            'target':245,
            'achieved':0
        },
        'Febuary':{
            'target':205,
            'achieved':0
        },
        'March':{
            'target':105,
            'achieved':0
        },
    }
    
},
"UK":{
    '008612':{
        'January':{
            'target':645,
            'achieved':0
        },
        'Febuary':{
            'target':505,
            'achieved':0
        },
        'March':{
            'target':445,
            'achieved':0
        },
    },
    '001232':{
        'January':{
            'target':745,
            'achieved':0
        },
        'Febuary':{
            'target':605,
            'achieved':0
        },
        'March':{
            'target':405,
            'achieved':0
        },
      }
    
 }

}

提前致谢!

您将不得不多次遍历字典及其值,并计算一个单独的字典来存储计算出的值。 已经写了示例代码供大家参考:

total = {}
for k, v in data.items():  # data is the original data dict
    for ik, iv in v.items():
        temp = total.get(ik, {})
        if not temp:
            total[ik] = iv
        else:
            for tk, tv in temp.items():
                for itk, itv in tv.items():
                    temp[tk][itk] += iv[tk][itk]

计算完上面的 total 字典后,您就可以将其添加到原始数据中。 希望这能回答您的问题。干杯!