美文网首页Python
python3 对json和字典进行遍历操作,类似于内置的lis

python3 对json和字典进行遍历操作,类似于内置的lis

作者: 逐风细雨 | 来源:发表于2021-02-05 15:21 被阅读0次

    python中有一些强大的内置函数map,可以优雅的遍历列表。最近碰到了需要,遍历修改json的值需求,因此想到实现一个类似map的方法,可以方便灵活的对json或者json转的字典进行遍历操作。代码如下:

    def dict_map(data_dict,func):
        """
        遍历data_dict的每个一值, 每个元素执行函数func,更新每个value的值。
        :param data_dict  要操作的字典。json.loads() 生成的字典,不支持集合和元组的元素操作
        :param func 执行的函数 函数声明: def func(key,value)
    
        data = {"a": 1, "b": [{"a": 1}, {"b": 2}, 3]}
        def func(key,value):
            # 对key 等于a 值转为str,其它的元素进行加1
            if key == 'a':
                return str(value)
            else:
                return value + 1
        data = dict_map(data, func)
        #将每个元素加10
        data = dict_map(data, lambda k, v: v + 10)
        #将每个元素转成字符串
        data = dict_map(data, lambda k, v: str(v))
        """
        tmp_dict = deepcopy(data_dict)
        for item in data_dict:
            tmp_value = data_dict.get(item)
            # tmp_value 为list时 按索引遍历调用
            if isinstance(tmp_value, list):
                for i in range(len(tmp_value)):
                    if not isinstance(tmp_value[i], (list, dict)):
                        tmp_dict[item][i] = func(item, tmp_value[i])
                    else:
                        tmp_dict[item][i] = dict_map(tmp_value[i], func)
            # 字典对象递归调用
            elif isinstance(tmp_value, dict):
                tmp_dict[item] = dict_map(tmp_value, func)
            # 其它类型直接调用func函数
            else:
                tmp_dict[item] = func(item, tmp_dict[item])
        return tmp_dict
    

    相关文章

      网友评论

        本文标题:python3 对json和字典进行遍历操作,类似于内置的lis

        本文链接:https://www.haomeiwen.com/subject/ehxgtltx.html