Python之如何同时兼容列表list和字典dict的迭代总结

list有一个index(o)方法可以找到索引,这个是dist和list同时兼容一种迭代的关键 

 @classmethod
    # 功能:models内部所以属性值为Decimal小数类型的都会自动转换成Float类型
    # 原理:利用递归的思想来改变传入models的数据【切记:必须直接改变models而不是迭代的o对象】
    # 说明:models内部必须是list或dict【由于元组无法改变,所以models不支持元组】
    def models_decimal_to_float(cls, model):
        # 如果不是一个Iterable可迭代对象【不支持for迭代的都不是一个可迭代对象】
        if not isinstance(model, collections.Iterable):
            return model

        for o in model:
            if isinstance(model, list):
                if isinstance(o, Decimal):
                    model[model.index(o)] = float(model[model.index(o)])
                # 【非常重要】递归改变models,所以这里不能传o,因为改变o是没办法改变models本身
                cls.models_decimal_to_float(model[model.index(o)])
            elif isinstance(model, dict):
                if isinstance(model[o], Decimal):
                    model[o] = float(model[o])
                # 【非常重要】递归改变models,所以这里不能传o,因为改变o是没办法改变models本身
                cls.models_decimal_to_float(model[o])
            else:
                # 改方法仅兼容可迭代对象dict和list,其他Iterable对象不处理
                pass
        return model

猜你喜欢

转载自blog.csdn.net/weixin_43343144/article/details/91366131