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

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

错误代码问题分析

  1. 未初始化字典c,直接调用c[i].append会抛出KeyError
  2. a.index(i)会返回列表中第一个匹配项的索引,若列表存在重复关键字,会导致索引错误
  3. 循环逻辑混乱: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:55:16