最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解

 更新時(shí)間:2019年08月09日 10:34:03   作者:furuiyang_  
今天小編就為大家分享一篇對python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

原始數(shù)據(jù)

原始數(shù)據(jù)大致是這樣子的:

每條數(shù)據(jù)中的四個(gè)數(shù)據(jù)分別是 當(dāng)前節(jié)點(diǎn)名稱,節(jié)點(diǎn)描述(指代一些需要的節(jié)點(diǎn)屬性),源節(jié)點(diǎn)(即最頂層節(jié)點(diǎn)),父節(jié)點(diǎn)(當(dāng)前節(jié)點(diǎn)上一層節(jié)點(diǎn))。

datas = [
 ["root", "根節(jié)點(diǎn)", "root", None],
 ["node1", "一級節(jié)點(diǎn)1", "root", "root"],
 ["node2", "一級節(jié)點(diǎn)2", "root", "root"],
 ["node11", "二級節(jié)點(diǎn)11", "root", "node1"],
 ["node12", "二級節(jié)點(diǎn)12", "root", "node1"],
 ["node21", "二級節(jié)點(diǎn)21", "root", "node2"],
 ["node22", "二級節(jié)點(diǎn)22", "root", "node2"],
]

節(jié)點(diǎn)類

抽象封裝出一個(gè)節(jié)點(diǎn)類:

class Node(object):
 def __init__(self, name: str, desc, parent: str, children: list):
 """
 初始化
 :param name:
 :param desc:
 :param parent:
 :param children:
 """
 self.name = name
 self.desc = desc
 self.parent = parent
 self.children = children

 def get_nodes(self):
 """
 獲取該節(jié)點(diǎn)下的全部結(jié)構(gòu)字典
 """
 d = dict()
 d['name'] = self.name
 d['desc'] = self.desc
 d['parent'] = self.parent
 children = self.get_children()
 if children:
  d['children'] = [child.get_nodes() for child in children]
 return d

 def get_children(self):
 """
 獲取該節(jié)點(diǎn)下的全部節(jié)點(diǎn)對象
 """
 return [n for n in nodes if n.parent == self.name]

 def __repr__(self):
 return self.name

將原始數(shù)據(jù)轉(zhuǎn)換為節(jié)點(diǎn)對象

nodes = list()
for data in datas:
 node = Node(data[0], data[1], data[-1], [])
 nodes.append(node)

為各個(gè)節(jié)點(diǎn)建立聯(lián)系

for node in nodes:
 children_names = [data[0] for data in datas if data[-1] == node.name]
 children = [node for node in nodes if node.name in children_names]
 node.children.extend(children)

測試

root = nodes[0]
print(root)

tree = root.get_nodes()
print(json.dumps(tree, indent=4))

運(yùn)行結(jié)果:

原始數(shù)據(jù)也可以是字典的形式:

### fork_tool.py
import json


class Node(object):
 def __init__(self, **kwargs):
 """
 初始化
 :param nodes: 樹的全部節(jié)點(diǎn)對象
 :param kwargs: 當(dāng)前節(jié)點(diǎn)參數(shù)
 """

 self.forked_id = kwargs.get("forked_id")
 self.max_drawdown = kwargs.get("max_drawdown")
 self.annualized_returns = kwargs.get("annualized_returns")
 self.create_time = kwargs.get("create_time")
 self.desc = kwargs.get("desc")
 self.origin = kwargs.get("origin")
 self.parent = kwargs.get("parent")
 self.children = kwargs.get("children", [])

 def get_nodes(self, nodes):
 """
 獲取該節(jié)點(diǎn)下的全部結(jié)構(gòu)字典,即建立樹狀聯(lián)系
 """
 d = dict()
 d['forked_id'] = self.forked_id
 d['max_drawdown'] = self.max_drawdown
 d['annualized_returns'] = self.annualized_returns
 d['create_time'] = self.create_time
 d['desc'] = self.desc
 d['origin'] = self.origin
 d['parent'] = self.parent
 children = self.get_children(nodes)
 if children:
  d['children'] = [child.get_nodes(nodes) for child in children]
 return d

 def get_children(self, nodes):
 """
 獲取該節(jié)點(diǎn)下的全部節(jié)點(diǎn)對象
 """
 return [n for n in nodes if n.parent == self.forked_id]

 # def __repr__(self):
 # return str(self.desc)


def process_datas(datas):
 """
 處理原始數(shù)據(jù)
 :param datas:
 :return:
 """
 # forked_infos.append({"forked_id": str(forked_strategy.get("_id")),
 # "max_drawdown": max_drawdown,
 # "annualized_returns": annualized_returns,
 # "create_time": create_time, # 分支創(chuàng)建時(shí)間
 # "desc": desc,
 # "origin": origin,
 # "parent": parent,
 # "children": [],
 # })

 nodes = []
 # 構(gòu)建節(jié)點(diǎn)列表集
 for data in datas:
 node = Node(**data)
 nodes.append(node)

 # 為各個(gè)節(jié)點(diǎn)對象建立類 nosql 結(jié)構(gòu)的聯(lián)系
 for node in nodes:
 children_ids = [data["forked_id"] for data in datas if data["parent"] == node.forked_id]
 children = [node for node in nodes if node.forked_id in children_ids]
 node.children.extend(children)

 return nodes


test_datas = [
 {'annualized_returns': 0.01,
 'children': [],
 'create_time': 1562038393,
 'desc': 'root',
 'forked_id': '5d1ad079e86117f3883f361e',
 'max_drawdown': 0.01,
 'origin': None,
 'parent': None},

 {'annualized_returns': 0.314,
 'children': [],
 'create_time': 1562060612,
 'desc': 'level1',
 'forked_id': '5d1b2744b264566d3f3f3632',
 'max_drawdown': 0.2,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1ad079e86117f3883f361e'},

 {'annualized_returns': 0.12,
 'children': [],
 'create_time': 1562060613,
 'desc': 'level11',
 'forked_id': '5d1b2745e86117f3883f3632',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1b2744b264566d3f3f3632'},

 {'annualized_returns': 0.09,
 'children': [],
 'create_time': 1562060614,
 'desc': 'level12',
 'forked_id': '5d1b2746b264566d3f3f3633',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1b2744b264566d3f3f3632'},

 {'annualized_returns': None,
 'children': [],
 'create_time': 1562060614,
 'desc': 'level2',
 'forked_id': '5d1b2746e86117f3883f3633',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1ad079e86117f3883f361e'},

 {'annualized_returns': None,
 'children': [],
 'create_time': 1562060627,
 'desc': 'level21',
 'forked_id': '5d1b2753b264566d3f3f3635',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1b2746e86117f3883f3633'},

 {'annualized_returns': None,
 'children': [],
 'create_time': 1562060628,
 'desc': 'level211',
 'forked_id': '5d1b2754b264566d3f3f3637',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1b2753b264566d3f3f3635'},

 {'annualized_returns': None,
 'children': [],
 'create_time': 1562060640,
 'desc': 'level212',
 'forked_id': '5d1b2760e86117f3883f3634',
 'max_drawdown': None,
 'origin': '5d1ad079e86117f3883f361e',
 'parent': '5d1b2753b264566d3f3f3635'},
]


if __name__ == "__main__":
 nodes = process_datas(test_datas)
 info = nodes[0].get_nodes(nodes)
 print(json.dumps(info, indent=4))

以上這篇對python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Django中創(chuàng)建第一個(gè)靜態(tài)視圖

    在Django中創(chuàng)建第一個(gè)靜態(tài)視圖

    這篇文章主要介紹了在Django中創(chuàng)建第一個(gè)靜態(tài)視圖的方法,與其他編程語言的開始一樣,以Hello world作為示例,需要的朋友可以參考下
    2015-07-07
  • Python3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)

    Python3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)

    下面小編就為大家?guī)硪黄狿ython3操作SQL Server數(shù)據(jù)庫(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python下載網(wǎng)絡(luò)小說實(shí)例代碼

    Python下載網(wǎng)絡(luò)小說實(shí)例代碼

    這篇文章主要介紹了Python下載網(wǎng)絡(luò)小說實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • PyCharm中New Directory 和 New Python Package的區(qū)別解析

    PyCharm中New Directory 和 New Python 

    python package這是一個(gè)特殊的目錄,因?yàn)樵趧?chuàng)建該python package的時(shí)候,系統(tǒng)會自動地生成一個(gè)py文件, init.py,這篇文章主要介紹了PyCharm中New Directory 和 New Python Package的區(qū)別,需要的朋友可以參考下
    2023-12-12
  • Python 多核并行計(jì)算的示例代碼

    Python 多核并行計(jì)算的示例代碼

    本篇文章主要介紹了Python 多核并行計(jì)算的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • pytorch中DataLoader()過程中遇到的一些問題

    pytorch中DataLoader()過程中遇到的一些問題

    這篇文章主要介紹了pytorch中DataLoader()過程中遇到的一些問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Pytorch.nn.conv2d 過程驗(yàn)證方式(單,多通道卷積過程)

    Pytorch.nn.conv2d 過程驗(yàn)證方式(單,多通道卷積過程)

    今天小編就為大家分享一篇Pytorch.nn.conv2d 過程驗(yàn)證方式(單,多通道卷積過程),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 詳解Python Opencv和PIL讀取圖像文件的差別

    詳解Python Opencv和PIL讀取圖像文件的差別

    這篇文章主要介紹了詳解Python Opencv和PIL讀取圖像文件的差別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python打開隱藏控制臺方法詳解

    python打開隱藏控制臺方法詳解

    這篇文章主要為大家介紹了python打開隱藏控制臺方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Python通過cv2讀取多個(gè)USB攝像頭

    Python通過cv2讀取多個(gè)USB攝像頭

    這篇文章主要為大家詳細(xì)介紹了Python通過cv2讀取多個(gè)USB攝像頭,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論

江油市| 鄂州市| 云安县| 芜湖县| 辽阳市| 康马县| 海宁市| 深水埗区| 安塞县| 沛县| 贡山| 淅川县| 手机| 清流县| 额敏县| 武陟县| 和政县| 尤溪县| 宾川县| 卢龙县| 淮阳县| 会宁县| 新津县| 平凉市| 大城县| 嘉兴市| 青海省| 兴海县| 镇原县| 辽中县| 兴隆县| 五原县| 大宁县| 临城县| 根河市| 大化| 永清县| 印江| 盐边县| 南溪县| 龙海市|