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

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

class data
    parent
    id

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

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

函数式编程
浏览 669回答 3
3回答

12345678_0001

这个问题可以转换成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

精慕HU

贴一下全一点的例子
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python