【Py】对列表字典混合嵌套的对象进行遍历

今天项目需要对列表字典混合嵌套的对象进行key重命名,经过一番搜索后找到如下代码

od = {'name': 'John', '1': [{'name': 'innername'}]}
kd = { 'name': 'cname', '1': '2', 3: 'z' }

def replace_keys(data_dict, key_dict):
    new_dict = { }
    if isinstance(data_dict, list):
        dict_value_list = list()
        for inner_dict in data_dict:
            dict_value_list.append(replace_keys(inner_dict, key_dict))
        return dict_value_list
    else:
        for key in data_dict.keys():
            value = data_dict[key]
            new_key = key_dict.get(key, key)
            if isinstance(value, dict) or isinstance(value, list):
                new_dict[new_key] = replace_keys(value, key_dict)
            else:
                new_dict[new_key] = value
        return new_dict
    return new_dict

nd = replace_keys(od, kd)
print(nd)

微调了一下,使其适应的范围更广

def replace_keys(data_dict, key_dict):
    if isinstance(data_dict, list):
        dict_value_list = list()
        for inner_dict in data_dict:
            dict_value_list.append(replace_keys(inner_dict, key_dict))
        return dict_value_list
    elif isinstance(data_dict, dict):
        new_dict = {}
        for key in data_dict.keys():
            value = data_dict[key]
            new_key = key_dict.get(key, key)
            if isinstance(value, dict) or isinstance(value, list):
                new_dict[new_key] = replace_keys(value, key_dict)
            else:
                new_dict[new_key] = value
        return new_dict
    else:
        return data_dict

上面的代码还能怎么用?
如果我们希望将下面对象中的所有key转为大写

['0', {'a': 1, 'b': {'c': 2}, 'c': [{'d': 3}, {'e': 4}]}, [{'f': 5}, '6']]
['0', {'A': 1, 'B': {'C': 2}, 'C': [{'D': 3}, {'E': 4}]}, [{'F': 5}, '6']]

就可以这么写:

data = ['0', {'a': 1, 'b': {'c': 2}, 'c': [{'d': 3}, {'e': 4}]}, [{'f': 5}, '6']]

def replace_keys(data_dict):
    if isinstance(data_dict, list):
        dict_value_list = list()
        for inner_dict in data_dict:
            dict_value_list.append(replace_keys(inner_dict))
        return dict_value_list
    elif isinstance(data_dict, dict):
        new_dict = {}
        for key in data_dict.keys():
            value = data_dict[key]
            new_key = key.upper()
            if isinstance(value, dict) or isinstance(value, list):
                new_dict[new_key] = replace_keys(value)
            else:
                new_dict[new_key] = value
        return new_dict
    else:
        return data_dict

print(replace_keys(data))

如果前端小姐姐要求你返回给她的json必需符合驼峰命名法,我们就可以通过上面代码结合转换函数,对任意结构的json进行转换啦

参考:
https://stackoverflow.com/a/69792145

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值