python 实现一个求解当前数据所有子项的方法

发布于 2022-09-07 20:35:07 字数 256 浏览 13 评论 0

假设数据结构是这样的:
有多条数据,每条数据都有属性parent(指向它的所属上级id),自身的唯一标识id。

class data
    parent
    id

当我拿出其中一条数据的时候,用一个方法计算出所有下级数据。就好比中国行政区数据一样,当我拿到广东省的时候,下面的市级,县级都要得到,如果县级下面还有分级也要一并拿到。

我写了一些代码,都太丑陋了,似乎是要用递归,求教一下有没有什么好的思路?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

亚希 2022-09-14 20:35:07

这个问题可以转换成N叉树的遍历,将某个节点的所有子节点计算出来。

    def return_all_children(self):
        """
        返回所有的子项
        :return:
        """
        root = self
        if not root:
            return []
        que = []  # 保存节点的队列
        res = []  # 保存结果的列表
        que.append(root)  #
        while len(que):  # 判断队列不为空
            length = len(que)
            sub = []  # 保存每层的节点的值
            for i in range(length):
                current = que.pop(0)  # 出队列的当前节点
                print(current)
                sub.append(current)
                for child in current.return_children:  # 所有子结点入队列
                    que.append(child)
            res.append(sub)  # 把每层的节点的值加入结果列表
        return res
鱼忆七猫命九 2022-09-14 20:35:07

储存空间够大的话可以建立一个字典
假如你的数据是个list名字叫CN(中国所有省市县...)

parent_d = {}
for item in CN:
    parent = item['parent']
    if parent in parent_d:
        parent_d[parent].append(item['id'])
    else:
        parent_d[parent] = [item['id']]

之后遍历一下

def get_all_children(city_id, parent_d):
    if city_id not in parent_d or not city_id:
        return []
    result = []
    temp_parent = [city_id]
    while temp:
        cur_id = temp_parent.pop(-1)
        result += parent_d[cur_id]
        temp_parent = parent_d[cur_id] + temp_parent
    return result
南城追梦 2022-09-14 20:35:07

贴一下全一点的例子

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文