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