【问题标题】:Adding mutiple but same keywords int value in python在python中添加多个但相同的关键字int值
【发布时间】:2020-03-03 12:48:58
【问题描述】:

我这里有这样的 json,例如:[{"passed_count": 24},{"passed_count": 22},{"passed_count": 0}]

如何仅添加所有关键字“passed_count”键值并存储在这样的字典中,

result_dict = {"Passed": 46}

到目前为止我已经做了以下方法但无法实现,

    json.dump(runs, fp)
    with open('runlist.json') as json_file:
        for line in json_file.readlines():
            run_details = json.loads(line)
            result_dict = {}
            for keyword in run_details:
                pass_count = keyword["passed_count"]
                if keyword["passed_count"] not in result_dict:
                   result_dict["Passed"] = pass_count
                if keyword["passed_count"] in result_dict:
                   result_dict["Passed"] += pass_count

【问题讨论】:

  • 您的代码甚至不包含加法运算符 (+) 或 sum。它应该如何加起来?
  • @Selcuk,我尝试了更新的代码
  • @iltech 如果你想要所有特定键的总和会更好-stackoverflow.com/a/32720343/6075699
  • 这样更好。你有一个逻辑错误; keyword["passed_count"] 是一个整数;为什么会是inresult_dict?我猜你想写if "Passed" in result_dict:...话虽如此,在for循环之前使用result_dict = {"Passed": 0}初始化它并摆脱if子句要容易得多。

标签: python


【解决方案1】:

我认为必须这样做!?

with open('runlist.json') as json_file:
        for line in json_file.readlines():
            run_details = json.loads(line)
            result_dict  = {"Passed": sum([pc.get("passed_count",0) for pc in run_details ])}
            # do whatever with result_dict

【讨论】:

    【解决方案2】:

    如下工作,将字典值初始化为 0 即可解决此问题

       result_dict = {"Passed": 0}
       for keyword in run_details:
           pass_count = keyword["passed_count"]
           result_dict["Passed"] += pass_count
    

    【讨论】:

      【解决方案3】:
      import json
      from collections import defaultdict
      
      json.dump(runs, fp)
      with open('runlist.json') as json_file:
          result_dict = defaultdict(int)
          for line in json_file.readlines():
              run_details = json.loads(line)
              for keyword in run_details:
                  # ...
                  pass_count = keyword["passed_count"]
                  result_dict['passed_count'] += pass_count
      
      

      【讨论】:

      • 这没有帮助,因为如果您在上面看到我的代码,我也采用了相同的方法
      • 不,不是:)再读一遍。
      【解决方案4】:

      您可以使用sum() 获取passed_count 属性的总和

      objects = [{"passed_count": 24},{"passed_count": 22},{"passed_count": 0}]
      reduction = {'passed': sum(item.get('passed_count', 0) for item in objects)}
      #                               ^^^^^ use get() to avoid key error by providing a default value of 0
      
      print(reduction)
      

      【讨论】:

        【解决方案5】:

        我觉得你可能想多了你的实现。 您可以尝试以下方法:

        import json
        
        with open('runlist.json') as json_file:
            for line in json_file.readlines():
                run_details = json.loads(line)
                result_dict = {"Passed": 0}
                for keyword in run_details:
                    if keyword.get("passed_count") is not None:
                    result_dict["Passed"] += keyword["passed_count"]
        
        print(result_dict)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-27
          • 2021-05-09
          • 2015-02-16
          • 1970-01-01
          相关资源
          最近更新 更多