python jsonpath value替换_使用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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值