辉煌仪奇 2021-09-30 09:34 采纳率: 47.4%
浏览 183
已结题

python 字典数据累加

我有一组数据,有一个字典数据如下

b = {
    1: {
        11: {
            111: 150,
            112: 151,
            113: 152,
        },
        12: {
            121: 160,
            122: 161,
            123: 162,
        },
    },
    2: {
        21: {
            211: 0,
            212: 1,
            213: 1,
        },
        22: {

            211: 0,
            212: 1,
            213: 1,
        },

    },
}

现在我需要一个方法,实现这样一个功能,随便传入一个key,返回该key下面所有子key的数据累计额和,如果该key是最后一级则返回该key值,如果没有改key值,则返回None

  • 写回答

3条回答 默认 最新

  • 江天暮雪丨 2021-09-30 10:22
    关注

    勉强算是实现了,需要进行更多样本测试

    def custom_sum(obj):
         """
        返回一个嵌套字典的所有值的和
        :param obj: dict  or int
        :return: summary
        """
        if isinstance(obj, dict):
            summary = 0
            for v in obj.values():
                summary += custom_sum(v)
            return summary
        else:
            return obj
    
    
    def search(dic: dict, key: int):
        """
       指定键进行多层嵌套的字典搜索
        """
        if not isinstance(dic, dict):
            return None
        print("Current dict:")
        print(dic)
        value = dic.get(key)
        if value:
            return custom_sum(value)
        else:
            for v in dic.values():
                result = search(v, key)
                if result:
                    return result
            return None
    
    
    # print(search(b, 1111))
    # print(search(b, 111))
    # print(search(b, 11))
    print(search(b, 1))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月30日
  • 已采纳回答 9月30日
  • 创建了问题 9月30日

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格