Python解析多行字符串提取内容生成指定结构字典列表的实现方法
实现思路
- 你现有代码的核心问题是只定义了单个字典存储数据,没有使用列表存储多个动作条目,同时也没有收集每个add指令后对应的id序列
- 正确的处理逻辑如下:
- 先将多行字符串按行拆分,过滤无内容的空行
- 遍历每一行内容,碰到以
add开头的行时,就将上一个已经处理完成的动作条目存入结果列表,同时初始化新的动作条目,解析出动作类型、DL名称列表 - 非add开头的行都属于当前动作条目的id,直接追加到id列表即可
- 遍历结束后把最后一条处理中的动作条目存入结果列表
完整可运行代码
description = '''add DL3,DL1,DL5,DL6 id7 add DL2,DL3,DL4 id1 id2 id3 add DL3 id1 id2 id3 ''' action = [] current_item = None for line in description.splitlines(): line = line.strip() if not line: continue # 碰到add开头的行,开启新条目 if line.startswith('add'): # 先把上一个条目存到结果里 if current_item is not None: action.append(current_item) # 初始化新条目 parts = line.split() dl_names = parts[1].split(',') current_item = { 'process': parts[0], 'dl_names': dl_names, 'id': [] } else: # 非add行是id,追加到当前条目 current_item['id'].append(line) # 把最后一个条目加进去 if current_item is not None: action.append(current_item) print(action)
运行输出
[{'process': 'add', 'dl_names': ['DL3', 'DL1', 'DL5', 'DL6'], 'id': ['id7']}, {'process': 'add', 'dl_names': ['DL2', 'DL3', 'DL4'], 'id': ['id1', 'id2', 'id3']}, {'process': 'add', 'dl_names': ['DL3'], 'id': ['id1', 'id2', 'id3']}]
完全匹配你需要的输出格式。
内容的提问来源于stack exchange,提问作者Aman Srivastava
相关产品推荐
相关产品推荐

