【问题标题】:Sum of list item inside dictionary json pytjon字典json python中列表项的总和
【发布时间】: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


【解决方案1】:
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))

【讨论】:

    【解决方案2】:

    This 可能就是您要找的。​​p>

    更新:

    这是一个代码示例

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2022-11-28
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2023-01-11
      • 2016-05-10
      • 2021-02-08
      相关资源
      最近更新 更多