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

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

class data
    parent
    id

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

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

阅读 2.2k
3 个回答

这个问题可以转换成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
新手上路,请多包涵

储存空间够大的话可以建立一个字典
假如你的数据是个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

贴一下全一点的例子

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题