• 使用python同时替换json多个指定key的value


    1.如何同时替换json多个指定key的value

    import json
    from jsonpath_ng import  parse
    
    
    
    def join_paths(regx_path,new_value,dict_replace):
        """
        eg: join_paths(regx_path='$..host..namespace', new_value="9999999999", dict_replace=pydict)
        :param regx_path: the path of replaced key
        :param new_value: the new value of key to be replaced
        :param dict_replace:  the initial_dict that to be replaced
        :return: dict
        """
        data = dict_replace
        jsonpath_expr = parse(regx_path)
        str_path_list=[str(match.full_path) for match in jsonpath_expr.find(dict_replace)]
        def cast_dict_path(path_list):
            cast_list = []
            for str_path in  path_list:
                path_split_list=str_path.split('.')
                path = ''
                for i in path_split_list:
                    if i.count('[')==1 and i.count(']')==1:
                        path=path+'[%s]'%eval(i)[0]
                    else:
                        path=path+"['%s']"%i
                cast_list.append(path)
            #[ "['role_parameters']['guest']['args']['data']['train_data'][0]['namespace']" ]
            return cast_list
        cast_paths=cast_dict_path(str_path_list)
        for i in cast_paths:
            if isinstance(new_value,str):
                fullpath="data"+i+"='%s'"%new_value
                abs_path=fullpath
                exec(abs_path)
            if isinstance(new_value,(int,list,float)):
                fullpath = "data" + i + "={}".format(new_value)
                abs_path=fullpath
                exec(abs_path)
        return data
    
    
    
    
    def muti_replace(rep_list,initial_dict:dict):
        """
        format of rep_list:
        [
            (regx_path1 ,new_value1) ],
            (regx_path2 ,new_value2 )
        ]
         for example:
        >> final_dict=muti_replace([('$..hetero_lr_0..eps',0.7777),('$..host..namespace',8888888)],initial_dict=pydict)
    
         initial_dict :the key  need to replaced dict ,type dict
        """
        dict_list=[]
        for i in rep_list:
                regx_path ,new_value=i[0],i[1]
                dict_next=join_paths(regx_path,new_value,dict_replace=initial_dict)
                dict_list.append(dict_next)
        for k in dict_list:
            initial_dict.update(k)
        print(json.dumps(initial_dict,indent=5))
        return initial_dict
    
    if __name__ == '__main__':
    
        final_dict=muti_replace([('$..hetero_lr_0..eps',0.7777),('$..host..namespace',8888888)],initial_dict=pydict)
    

     测试数据:

    {
      "initiator": {
        "role": "guest",
        "party_id":9997
      },
      "job_parameters": {
        "work_mode": 1
      },
      "role": {
        "guest": [
          9997
        ],
        "host": [
          9997
        ],
        "arbiter": [
          9997
        ]
      },
      "role_parameters": {
        "guest": {
          "args": {
            "data": {
              "train_data": [
                {
                  "name": "breast_guest",
                  "namespace": "breast_guest"
                }
              ]
            }
          },
          "dataio_0": {
            "with_label": [true],
            "label_name": ["y"],
            "label_type": ["int"],
            "output_format": ["dense"],
            "missing_fill": [true],
            "outlier_replace": [true]
          },
          "feature_scale_0": {
            "method": ["min_max_scale"]
          },
          "hetero_feature_binning_0": {
            "method": ["quantile"],
            "compress_thres": [10000],
            "head_size": [10000],
            "error": [0.001],
            "bin_num": [10],
            "cols": [-1],
            "adjustment_factor": [0.5],
            "local_only": [false],
            "transform_param": {
              "transform_cols": [-1],
              "transform_type": ["bin_num"]
            }
          },
          "hetero_feature_selection_0": {
            "select_cols": [-1],
            "filter_methods": [[
              "unique_value",
              "iv_value_thres",
              "coefficient_of_variation_value_thres",
              "iv_percentile",
              "outlier_cols"
            ]],
            "local_only": [false],
            "unique_param": {
              "eps": [1e-6]
            },
            "iv_value_param": {
              "value_threshold": [1.0]
            },
            "iv_percentile_param": {
              "percentile_threshold": [0.9]
            },
            "variance_coe_param": {
              "value_threshold": [0.3]
            },
            "outlier_param": {
              "percentile": [0.95],
              "upper_threshold": [10]
            }
          },
          "evaluation_0": {
            "eval_type": ["binary"],
            "pos_label": [1]
          }
        },
        "host": {
          "args": {
            "data": {
              "train_data": [
                {
                  "name": "breast_host",
                  "namespace": "breast_host"
                }
              ]
            }
          },
          "dataio_0": {
            "with_label": [false],
            "output_format": ["dense"],
            "outlier_replace": [true]
          },
          "feature_scale_0": {
            "method": ["standard_scale"],
            "need_run": [false]
          },
          "hetero_feature_binning_0": {
            "method": ["quantile"],
            "compress_thres": [10000],
            "head_size": [10000],
            "error": [0.001],
            "bin_num": [10],
            "cols": [-1],
            "adjustment_factor": [0.5],
            "local_only": [false],
            "transform_param": {
              "transform_cols": [-1],
              "transform_type": ["bin_num"]
            }
          },
          "hetero_feature_selection_0": {
            "select_cols": [-1],
            "filter_methods": [[
              "unique_value",
              "iv_value_thres",
              "coefficient_of_variation_value_thres",
              "iv_percentile",
              "outlier_cols"
            ]],
            "local_only": [false],
            "unique_param": {
              "eps": [1e-6]
            },
            "iv_value_param": {
              "value_threshold": [1.0]
            },
            "iv_percentile_param": {
              "percentile_threshold": [0.9]
            },
            "variance_coe_param": {
              "value_threshold": [0.3]
            },
            "outlier_param": {
              "percentile": [0.95],
              "upper_threshold": [10]
            }
          },
          "evaluation_0": {
            "need_run": [true]
          }
        }
      },
      "algorithm_parameters": {
        "feature_scale_0": {
            "need_run": true
        },
        "hetero_feature_binning_0": {
          "need_run": true
        },
        "hetero_feature_selection_0": {
          "need_run": true
        },
        "hetero_lr_0": {
          "penalty": "L2",
          "optimizer": "rmsprop",
          "eps": 1e-5,
          "alpha": 0.01,
          "max_iter": 10,
          "converge_func": "diff",
          "batch_size": -1,
          "learning_rate": 0.15,
          "init_param": {
            "init_method": "random_uniform"
          },
          "cv_param": {
            "n_splits": 5,
            "shuffle": false,
            "random_seed": 103,
            "need_cv": false
          }
        }
      }
    }
    View Code
  • 相关阅读:
    00005-js 获取uuid
    00004-form 表单的清空、重置 (jquery)
    使用Socket进行通信
    使用ServerSocket创建TCP服务器端
    TCP协议基础
    基于TCP协议的网络通信
    3D MAX在立方体的使用
    应用纹理贴图
    使用OpenGL ES绘制3D图形
    GL10控制图形旋转
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/11808167.html
Copyright © 2020-2023  润新知