You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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引用这类引用关系对吧?

实现思路和代码

我给你写一套直观的实现方案,核心是先构建引用关系映射,再通过递归生成层级结构:

  1. 首先构建引用关系字典:把每个被引用的文章作为键,对应的所有引用它的文章作为值
  2. 用递归函数从"根节点"(没有引用任何文章的节点)开始,逐层展开引用关系,生成带缩进的层级列表
  3. 最后打印出结构化的结果

完整代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:52