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

Python库文件属性行分组问题:如何将同attr行归为列表子列表?

按属性分组生成子列表的解决方案

问题分析

你需要将库文件中同属性(如attr1、attr2)的行分组为子列表,作为生成笛卡尔积组合的基础结构。当前代码的核心问题是分组逻辑失效:所有行都匹配attr\d+正则表达式,导致else分支从未触发,最终所有行被合并到同一个列表中,无法实现按属性分组。

修正方案

核心思路是提取每行的属性标识(如attr1),以此为依据分组,以下是两种高效实现方式:

方法1:字典分组(推荐,大文件处理更高效)

用字典的Key存储属性标识,Value存储对应行的列表,最后将字典的值转为目标格式即可:

import re

# 正则捕获属性标识(如attr1、attr2)
pattern = re.compile(r'(attr\d+)')

grouped_dict = {}

with open(r"file path") as file:
    for line in file:
        line = line.strip()
        if not line:  # 跳过空行
            continue
        match = pattern.search(line)
        if match:
            attr_key = match.group(1)
            # 不存在则创建空列表,再添加当前行
            grouped_dict.setdefault(attr_key, []).append(line)

# 转换为期望的嵌套列表格式
grouped_elements = list(grouped_dict.values())
print(grouped_elements)

方法2:遍历跟踪当前属性

通过记录当前属性,当遇到不同属性时,保存当前组并创建新组:

import re

pattern = re.compile(r'(attr\d+)')

grouped_elements = []
current_group = []
current_attr = None

with open(r"file path") as file:
    for line in file:
        line = line.strip()
        if not line:
            continue
        match = pattern.search(line)
        if match:
            attr = match.group(1)
            if current_attr is None:
                # 初始化第一个分组
                current_attr = attr
                current_group.append(line)
            elif attr == current_attr:
                # 同属性,加入当前组
                current_group.append(line)
            else:
                # 属性变更,保存当前组并重置
                grouped_elements.append(current_group)
                current_attr = attr
                current_group = [line]
# 处理最后一个未保存的分组
if current_group:
    grouped_elements.append(current_group)

print(grouped_elements)

输出验证

针对示例输入,两种方法都会输出符合预期的结果:

[['attr1 apple 1','attr1 banana 2'], ['attr2 grapes 1','attr2 oranges 2'], ['attr3 watermelon 0']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:40:53