person = {"male":{"name":"Shawn"}, "female":{"name":"Betty","age":[{"aaaa":123},{"bbbb":234}]},"children":{"name":{"first_name":"李", "last_name":{"old":"明明","now":"铭"}},"age":4}}
拼接所有层级key
key_list = {}
def dict_2dm_full(data_json,upperstr=‘‘):
if isinstance(data_json, dict):
for key in data_json.keys():
if isinstance(data_json[key], dict):
dict_2dm_full(data_json[key],upperstr+key+"_")
if not isinstance(data_json[key], dict):
key_list[upperstr+key]=data_json[key]
return key_list
输出
{‘male_name‘: ‘Shawn‘, ‘female_name‘: ‘Betty‘, ‘female_age‘: [{‘aaaa‘: 123}, {‘bbbb‘: 234}], ‘children_name_first_name‘: ‘李‘, ‘children_name_last_name_old‘: ‘明明‘, ‘children_name_last_name_now‘: ‘铭‘, ‘children_age‘: 4}
重名key拼接上层key
def dict_2dm_full_opt(data_json,upperstr=‘‘):
if isinstance(data_json, dict):
for key in data_json.keys():
if isinstance(data_json[key], dict):
dict_2dm_full_opt(data_json[key],upperstr+key+"_")
if not isinstance(data_json[key], dict):
_key = key
if key in key_list:
_key = upperstr+ _key
key_list[_key]=data_json[key]
return key_list
输出
{‘name‘: ‘Shawn‘, ‘female_name‘: ‘Betty‘, ‘age‘: [{‘aaaa‘: 123}, {‘bbbb‘: 234}], ‘first_name‘: ‘李‘, ‘old‘: ‘明明‘, ‘now‘: ‘铭‘, ‘children_age‘: 4}
重名key覆盖
def dict_2dm_min(data_json):
if isinstance(data_json, dict):
for key in data_json.keys():
if isinstance(data_json[key], dict):
dict_2dm_min(data_json[key])
if not isinstance(data_json[key], dict):
key_list[key]=data_json[key]
return key_list
输出
{‘name‘: ‘Betty‘, ‘age‘: 4, ‘first_name‘: ‘李‘, ‘old‘: ‘明明‘, ‘now‘: ‘铭‘}
原文:https://www.cnblogs.com/bionexit/p/14730342.html