如何用Python处理层级回复文本,实现回复关联对应父级内容?
解决层级回复转换问题
你的需求是把带多级-前缀的嵌套回复,转换成每条都包含直接父节点上下文的格式对吧?我来给你梳理思路和实现代码:
核心思路
问题的关键在于跟踪每个回复对应的父节点:
- 每条回复的
-数量代表它的层级(比如--xxx是层级2,父节点是最近的层级1回复) - 用一个**栈(列表)**来维护当前各层级的最新父节点:
- 层级n的回复,父节点就是栈中索引为
n-1的元素 - 处理完当前回复后,更新栈:如果是新层级就追加,同一层级的新回复替换栈中对应位置的元素(因为它会成为后续子回复的父节点)
- 层级n的回复,父节点就是栈中索引为
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
相关产品推荐
相关产品推荐

