递归地将嵌套字典中的对象呈现为json

2024-04-19 18:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我原来的字典:

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

Tags: 对象函数json类型列表dictionary字典obj2
1条回答
网友
1楼 · 发布于 2024-04-19 18:35:31

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

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\u值根据其参数的类型确定要调用哪个copy函数。你知道吗

如果这只是为了生成json,那么使用json模块不要试图编写自己的json序列化程序!你知道吗

相关问题 更多 >