首页 > 其他 > 详细

通过递归将多维字典转化为二维

时间:2021-05-04 23:31:22      阅读:32      评论:0      收藏:0      [点我收藏+]

输入多维字典

person = {"male":{"name":"Shawn"}, "female":{"name":"Betty","age":[{"aaaa":123},{"bbbb":234}]},"children":{"name":{"first_name":"李", "last_name":{"old":"明明","now":"铭"}},"age":4}}

方案1

拼接所有层级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}

方案2

重名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}

方案3

重名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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!