我有一个看似简单的问题,但无法解决。
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)
这适用于“打印”,但我如何将其调整为“总结”?
答案 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