如何用Python循环构建文章引用层级?附示例数据
用Pandas构建文章引用层级结构的实现方法
咱们先来明确你的初始数据和需求:
你的初始数据是这样的Pandas DataFrame:
import pandas as pd article = ["A",'B','C','D','E','F','G','H'] quote = ['','A','A','C','C','','A','B'] df = pd.DataFrame({'Article':article,'Quote':quote})
需求是基于Quote列构建文章的引用层级,最终要清晰展示A被B引用、B被H引用这类引用关系对吧?
实现思路和代码
我给你写一套直观的实现方案,核心是先构建引用关系映射,再通过递归生成层级结构:
- 首先构建引用关系字典:把每个被引用的文章作为键,对应的所有引用它的文章作为值
- 用递归函数从"根节点"(没有引用任何文章的节点)开始,逐层展开引用关系,生成带缩进的层级列表
- 最后打印出结构化的结果
完整代码如下:
import pandas as pd # 初始化数据 article = ["A",'B','C','D','E','F','G','H'] quote = ['','A','A','C','C','','A','B'] df = pd.DataFrame({'Article':article,'Quote':quote}) # 构建引用关系映射:key=被引用文章,value=引用它的文章列表 ref_map = df[df['Quote'] != ''].groupby('Quote')['Article'].apply(list).to_dict() # 递归生成层级结构的函数 def build_hierarchy(node, level=0): # 用缩进表示层级 indent = " " * level current_line = [f"{indent}* {node}"] # 如果当前节点有被其他文章引用,递归处理引用它的文章 if node in ref_map: for child_article in ref_map[node]: current_line.extend(build_hierarchy(child_article, level + 1)) return current_line # 获取所有根节点:没有引用任何文章的节点(Quote为空) root_nodes = df[df['Quote'] == '']['Article'].tolist() # 生成完整的层级结构 full_hierarchy = [] for root in root_nodes: full_hierarchy.extend(build_hierarchy(root)) # 打印最终的层级结果 for line in full_hierarchy: print(line)
运行结果
执行上面的代码后,你会得到这样的结构化输出:
* A * B * H * C * D * E * G * F
从这个结果里你能清晰看到:
- A被B、C、G引用
- B被H引用
- C被D、E引用
- F没有引用任何文章,也没被其他文章引用
这样就完全满足你的需求啦!
内容的提问来源于stack exchange,提问作者judy
相关产品推荐
相关产品推荐

