Python 字典json pytjon中列表项的总和

Python 字典json pytjon中列表项的总和,python,json,dictionary,Python,Json,Dictionary,我有一个json,如下所示: { "fields": { "List1": [ "List2": [ { "List3": [ { "item": "1", "sale": 1149.99

我有一个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_列表,所以我制作了一个嵌套函数

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)
可能就是你要找的

更新:

下面是一个代码示例

def find(key, dictionary, sale_list):
    for k, v in dictionary.items():
        if k == key:
            yield dictionary
            sale_list.append(v)
        elif isinstance(v, dict):
            for result in find(key, v, sale_list):
                yield result
        elif isinstance(v, list):
            for d in v:
                if isinstance(d, dict):
                    for result in find(key, d, sale_list):
                        yield result

sale_list = []
list(find("sale", data, sale_list))
print(sum(sale_list))

您递归调用了
sale\u sum()
,但忽略了返回的值。您应该将
sale\u list=[]
移到函数
sale\u sum
之外。每次调用所有函数
sale\u sum
,它都会初始化为空。json也是无效的。您可以使用联机json解析器进行检查。@Martin我将sale_list=[]放在函数之外,但仍然得到0您从未在新代码中调用
list_count
。在范围(0,len(sale_list))中的i的
前面调用
list_count(json)
myjson = {
  "fields": {
        "List1": [
            { "List2": [
              {
                "List3": [
                    {
                        "item": "1",
                        "sale": 1149.99
                    },
                    {
                        "item": "2",
                        "sale": 20
                    }
                ]
              }
            ]}
        ]
    }
}


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)
    list_count(json)
    for i in range(0, len(sale_list)):
        sale_list2[i] = int(sale_list[i])

    return sum(sale_list)

print(sale_sum(myjson))