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

如何用Python处理层级回复文本,实现回复关联对应父级内容?

解决层级回复转换问题

你的需求是把带多级-前缀的嵌套回复,转换成每条都包含直接父节点上下文的格式对吧?我来给你梳理思路和实现代码:

核心思路

问题的关键在于跟踪每个回复对应的父节点:

  1. 每条回复的-数量代表它的层级(比如--xxx是层级2,父节点是最近的层级1回复)
  2. 用一个**栈(列表)**来维护当前各层级的最新父节点:
    • 层级n的回复,父节点就是栈中索引为n-1的元素
    • 处理完当前回复后,更新栈:如果是新层级就追加,同一层级的新回复替换栈中对应位置的元素(因为它会成为后续子回复的父节点)

Python实现代码

def process_hierarchy(lines):
    stack = []
    result = []
    for line in lines:
        # 计算当前回复的层级(统计开头连续的'-'数量)
        level = 0
        while level < len(line) and line[level] == '-':
            level += 1
        
        current_text = line
        if level == 0:
            # 根节点(没有'-'前缀),直接加入栈
            stack.append(current_text)
            continue
        
        # 获取父节点文本,组合成目标格式
        parent_text = stack[level - 1]
        combined_entry = f"{parent_text} {current_text}"
        result.append(combined_entry)
        
        # 更新栈:维护当前层级的最新父节点
        if level == len(stack):
            stack.append(current_text)
        else:
            stack[level] = current_text
    
    return result

# 测试你的实际数据
data = """为什么我找不到女朋友?\n-/u/remainenthroned \n-试试用Tinder\n--r/incels\n--也许你应该找个环保主义者。\n---我曾被发好人卡,所以算了\n----你知道的,树不太擅长动。\n-----试试Grindr"""
# 拆分并清理空行/首尾空格
lines = [line.strip() for line in data.split('\n') if line.strip()]

# 处理并输出结果
processed_result = process_hierarchy(lines)
print(',\n'.join(f'"{item}"' for item in processed_result))

输出效果

运行后会得到你期望的格式:

"为什么我找不到女朋友? -/u/remainenthroned",
"为什么我找不到女朋友? -试试用Tinder",
"-试试用Tinder --r/incels",
"-试试用Tinder --也许你应该找个环保主义者。",
"--也许你应该找个环保主义者。 ---我曾被发好人卡,所以算了",
"---我曾被发好人卡,所以算了 ----你知道的,树不太擅长动。",
"----你知道的,树不太擅长动。 -----试试Grindr"

这个逻辑可以轻松扩展到更多层级的回复,只要保持-前缀的层级规则就行。

内容的提问来源于stack exchange,提问作者user3646742

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:27