Python实现按指定关键字分组提取列表元素生成字典
列表关键字分段提取并生成字典的解决方案
我有一个数据列表a和关键字列表b,需要从a中提取每个匹配关键字之后的元素,直到遇到下一个关键字为止,将这些元素与对应关键字组成字典,最终生成多个这样的字典。现有代码逻辑有问题,无法得到预期结果,求正确实现方法。
相关数据
列表a
a = ['Experience', 'Software Engineer', 'EY', 'Sep 2018 - Present', 'Education', 'xyz College', 'Bachelor of Technology - BTech, Computer Science', '2014 - 2017', 'Licenses', 'The Joy of Computing using Python ', 'NPTEL', 'Issued Jan 2020']
关键字列表b
b = ['Experience', 'Education', 'Licenses']
预期结果
c = [ {'Experience':['Software Engineer','EY', 'Sep 2018 - Present']}, {'Education':['xyz College','Bachelor of Technology - BTech, Computer Science','2014 - 2017']}, {'Licenses':['The Joy of Computing using Python ','NPTEL','Issued Jan 2020']} ]
现有错误代码
for i in a: j = a.index(i) k = 1 while i in b: c[i].append(a[j+1]) if i == a[k]: k+=1 break else: j+=1
错误代码问题分析
- 未初始化字典
c,直接调用c[i].append会抛出KeyError a.index(i)会返回列表中第一个匹配项的索引,若列表存在重复关键字,会导致索引错误- 循环逻辑混乱:
while i in b的终止条件不明确,if i == a[k]的判断完全不符合“找到下一个关键字”的需求,根本无法正确分段
正确实现方法
方法一:基于关键字索引分段
先获取所有关键字在列表中的位置,再根据索引区间提取对应元素:
# 获取每个关键字在a中的索引 key_positions = [a.index(key) for key in b] # 添加列表末尾索引,方便处理最后一段元素 key_positions.append(len(a)) result = [] for i in range(len(b)): start_idx = key_positions[i] + 1 end_idx = key_positions[i+1] # 生成对应字典并加入结果列表 result.append({b[i]: a[start_idx:end_idx]}) # 输出结果 print(result)
方法二:遍历列表实时收集元素
逐个遍历列表元素,遇到关键字就切换收集目标,直到下一个关键字出现:
result = [] current_key = None current_elements = [] for item in a: if item in b: # 如果已有正在收集的关键字,先把之前的结果存入 if current_key is not None: result.append({current_key: current_elements}) current_elements = [] current_key = item else: # 非关键字元素,加入当前收集列表 if current_key is not None: current_elements.append(item) # 处理最后一个关键字的剩余元素 if current_key is not None: result.append({current_key: current_elements}) # 输出结果 print(result)
两种方法都能得到预期结果:方法一适合关键字在列表中唯一且顺序固定的场景;方法二更灵活,能应对关键字顺序变化的情况。
内容的提问来源于stack exchange,提问作者Vishnuu
相关产品推荐
相关产品推荐

