在嵌套的dict / list中转换Decimal.decimalvalues

时间:2017-05-23 23:55:17

标签: python mongodb dictionary nested

我的对象是dictlist,常规数据类型和decimal.Decimal的嵌套组合。我想用PyMongo将此对象插入MongoDB。 PyMongo拒绝插入Decimal.decimal,因此我想将所有Decimal.decimal转换为string

以前,您可以使用son_manipulator执行此操作,但现在是deprecated

如何有效地将嵌套数据结构中的所有decimal.Decimal个对象转换为string

1 个答案:

答案 0 :(得分:1)

与亚马逊的DynamoDB和boto3完全相同的问题。

def replace_decimals(obj):
    if isinstance(obj, list):
        for i in xrange(len(obj)):
            obj[i] = replace_decimals(obj[i])
        return obj
    elif isinstance(obj, dict):
        for k in obj.iterkeys():
            obj[k] = replace_decimals(obj[k])
        return obj
    elif isinstance(obj, decimal.Decimal):
        return str(obj)
        # In my original code I'm converting to int or float, comment the line above if necessary.
        if obj % 1 == 0:
            return int(obj)
        else:
            return float(obj)
    else:
        return obj