【发布时间】:2020-12-16 19:21:34
【问题描述】:
我有一个像下面这样的 json:
{
"fields": {
"List1": [
"List2": [
{
"List3": [
{
"item": "1",
"sale": 1149.99
},
{
"item": "2",
"sale": 20
}]}]]}}
我正在使用这种递归方法来返回列表的总和:
def sale_sum(json):
sale_list=[]
if isinstance(json, dict):
for k, v in json.items():
if k == 'sale':
sale_list.append(v)
elif isinstance(v, list):
for e in v:
sale_sum(e)
elif isinstance(v, dict):
sale_sum(v)
for i in range(0, len(sale_list)):
sale_list[i] = int(sale_list[i])
return sum(sale_list)
但我一直从结果中得到 0。代码有什么问题?有没有更好的方法来做到这一点?
更新:
对此进行了更改,但仍然为 0。我需要函数内部的 sale_list,所以我创建了一个嵌套函数。
def sale_sum(json):
sale_list=[]
def list_count(json):
if isinstance(json, dict):
for k, v in json.items():
if k == 'sale':
sale_list.append(v)
elif isinstance(v, list):
for e in v:
list_count(e)
elif isinstance(v, dict):
list_count(v)
for i in range(0, len(sale_list)):
sale_list[i] = int(sale_list[i])
return sum(sale_list)
【问题讨论】:
-
您正在递归调用
sale_sum(),但您忽略了返回值。 -
你应该将
sale_list=[]移到函数sale_sum之外。每次你使用所有函数sale_sum时,它都会被初始化为空。 -
json 也是无效的。您可以使用在线 json 解析器进行检查。
-
@Martin 我将 sale_list=[] 放在函数之外,但仍然得到 0
-
您永远不会在新代码中调用
list_count。在for i in range(0, len(sale_list)):之前拨打list_count(json)的电话
标签: python json dictionary