嵌套字典汇总所有值

时间:2016-03-08 02:20:41

标签: python recursion

我有一个看似简单的问题,但无法解决。

Dictionary = {
    'own': {
        'Dun Morogh': {
            'Horde': {
                'chars': {
                    'Qiidu': {
                        'auction': 1
                        }
                    }
                 }
            }, 
        'Tirion': {
            'Alliance': {
                'chars': {
                    'Qiip': {
                        'auction': 1
                         }
                     }
                 }
            }, 
        'Proudmoore': {
            'Alliance': {
                'chars': {
                    'Qiip': {
                        'mail': 1
                        }
                    }
                }
            } 
        }, 
    'name': u'Rascal-Bot'
}

这是我的字典中的格式,我想循环遍历它,将其中的所有整数相加并返回它。

我的代码:

def findTotal(self, dct):
    for key, value in dct.iteritems():
        if isinstance(value, int):
            print key, value
        if isinstance(value, dict):
            self.findTotal(value)

这适用于“打印”,但我如何将其调整为“总结”?

2 个答案:

答案 0 :(得分:3)

您可以添加sum变量来跟踪总和,并让您的函数返回该值。递归调用将累加“子总和”并将它们返回给他们的呼叫者,他们将把它们添加到他们的总计,直到你回到第一个呼叫和总计。< / p>

def findTotal(self, dct):
    total = 0
    for key, value in dct.iteritems():
        if isinstance(value, int):
            total += value
        if isinstance(value, dict):
            total += self.findTotal(value)
    return total

答案 1 :(得分:0)

鉴于您正在使用递归函数,您需要返回调用堆栈的总和:

def findTotal(self, dct):
    total = 0
    for key, value in dct.iteritems():
        if isinstance(value, int):
            total += value
        if isinstance(value, dict):
            total += self.findTotal(value)
    return total

或者,您可以递归到每个选项并检查终端案例:

def findTotal(self, item):
    if isintance(item, int):
        return item
    if not isintance(item, dict):
        return 0

    total = 0
    for value in item.itervalues():
        total += self.findTotal(value)
    return total