将嵌套字典中的对象递归渲染为json

时间:2014-11-17 21:35:32

标签: python recursion dictionary

如何循环遍历嵌套字典,将它们转换为json(或任何其他类型的函数),而不管递归中最后一个对象是列表的字典长度。

我原来的词典:

dictionary = {
    <obj1> : {
        <obj2>: {
            <obj3>: {
                [<obj4>, <obj5>, <obj6>],
            },
        <obj7>: {
            <obj8>: {
                [<obj9>, <obj10>, <obj11>],
            },
     <obj12> : {
         <obj13>: {
             <obj14>: {
                 [<obj15>, <obj16>, <obj17>],
             },
     }

1 个答案:

答案 0 :(得分:0)

通常,您需要实现一个类型开关和一组递归函数:

class MyDict(dict):
    def __repr__(self):
        return "MyDict(%s)" % super(MyDict, self).__repr__()

class MyList(list):
    def __repr__(self):
        return "MyList(%s)" % super(MyList, self).__repr__()


def copy_dict(val):
    res = MyDict()
    for k, v in val.items():
        res[k] = copy_value(v)
    return res


def copy_list(val):
    res = MyList()
    for item in val:
        res.append(copy_value(item))
    return res


def copy_default(val):
    return val


COPYFN = {
    dict: copy_dict,
    list: copy_list,
}

def copy_value(v):
    copy_fn = COPYFN.get(type(v), copy_default)
    #print("COPYVAL:", copy_fn, type(v), v)
    return copy_fn(v)



d = dict(hello=dict(beautiful=['world']))

print(copy_value(d))

即。所以copy_value根据它的参数类型确定要调用的复制函数。

如果这只是产品json,那么使用json模块 - 不要尝试编写自己的json序列化器!