第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何遞歸地對(duì)python對(duì)象進(jìn)行jsonize

如何遞歸地對(duì)python對(duì)象進(jìn)行jsonize

蝴蝶刀刀 2022-06-22 18:40:06
我有以下對(duì)象:class Heading:    def __init__(self, text):        self._text = text        self._subheadings = []    def add_subheading(self, sub):        self._subheadings.append(sub)myh1類型Headingeg 包含以下結(jié)構(gòu):所以這個(gè)h1包含(你不能看到全部)4個(gè)h2s。h2 可能包含也可能不包含 h3s 等等。遞歸地,每個(gè)對(duì)象都是類型Heading并且是_subheadings.我現(xiàn)在想將此結(jié)構(gòu)序列化為 json 字符串。實(shí)現(xiàn)這一目標(biāo)最順利的方法是什么?否則我會(huì)構(gòu)建這樣的東西(顯然它還沒(méi)有完成,現(xiàn)在它只是遍歷所有標(biāo)題):def jsonize_headings(self):    # main object    headings = {}    # h1 heading    headings["h1_heading"] = self.h1_heading.text    # h2 headings    for h2 in self.h1_heading.subheadings:        h2_dict = dict()        h2_dict["h2_heading"] = h2.text        # h3 headings        for h3 in h2.subheadings:            h3_dict = dict()            h3_dict["h3_heading"] = h3.text            # h4 headings            for h4 in h3.subheadings:                h4_dict = dict()                h4_dict["h4_heading"] = h4.text                # h5 headings                for h5 in h4.subheadings:                    h5_dict = dict()                    h5_dict["h5_heading"] = h5.text                    # h6 headings                    for h6 in h5.subheadings:                        h6_dict = dict()                        h6_dict["h6_heading"] = h6.text最后結(jié)果:class Heading:    def __init__(self, text):        self._text = text        self._subheadings = []    def add_subheading(self, sub):        self._subheadings.append(sub)    @property    def text(self):        return self._text    @property    def subheadings(self):        return self._subheadings    @classmethod    def to_dict(cls, _obj):        def _to_dict(d, c=1):            e = dict()            e[f"h{c}_heading"] = d.text            if d.subheadings:                e[f"h{c+1}_headings"] = [_to_dict(sub, c+1) for sub in d.subheadings]            return e        return _to_dict((_obj))
查看完整描述

1 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用遞歸itertools.count:


import itertools

class Heading:

   def __init__(self, text):

     self._text = text

     self._subheadings = []

   def add_subheading(self, sub):

     self._subheadings.append(sub)

   @classmethod

   def to_dict(cls, _obj):

     c = itertools.count(1)

     def _to_dict(d):

        return {f'h{next(c)}_heading':d._text, 'children':list(map(_to_dict, d._subheadings))}

     return _to_dict(_obj)

現(xiàn)在:


import json

h, c1, c2 = Heading('test_header1'), Heading('test_sub_header1'), Heading('test_sub_header2')

c1.add_subheading(c2)

h.add_subheading(c1)

print(json.dumps(Heading.to_dict(h), indent=4))

輸出:


{

    "h1_heading": "test_header1",

    "children": [

    {

        "h2_heading": "test_sub_header1",

        "children": [

            {

                "h3_heading": "test_sub_header2",

                "children": []

            }

        ]

      }

   ]  

}

這是一個(gè)簡(jiǎn)化的示例,但是,可以輕松更新遞歸過(guò)程以支持自定義鍵名等。


查看完整回答
反對(duì) 回復(fù) 2022-06-22
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)