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

已知分类名称,如何将含分类项的一维列表转换为字典

如何将分类项前置的一维列表转换为分类键字典

问题描述

现有一维列表l1,内容为分类项后跟对应元素,同时已知所有分类名称组成的列表l2,需要将l1转换为以分类为键、对应元素列表为值的字典。

示例:
输入列表:

l1 = ['cat1', 'a', 'b', 'c', 'cat2', 1, 2, 3, 'cat3', 4, 5, 6, 7, 8]

分类列表:

l2 = ['cat1', 'cat2', 'cat3']

目标字典:

l1_dic = {'cat1': ['a', 'b', 'c'], 'cat2': [1, 2, 3], 'cat3': [4, 5, 6, 7, 8]}

注:分类名称无共同特征,可替换为任意名称如'Name'、'Address'。

解决方案

方法一:遍历追踪当前分类

这是最直观的实现方式,遍历l1时遇到分类项就切换当前键,否则将元素追加到当前键对应的列表中。

l1 = ['cat1', 'a', 'b', 'c', 'cat2', 1, 2, 3, 'cat3', 4, 5, 6, 7, 8]
l2 = ['cat1', 'cat2', 'cat3']

l1_dic = {}
current_key = None

for item in l1:
    if item in l2:
        current_key = item
        l1_dic[current_key] = []
    else:
        if current_key is not None:
            l1_dic[current_key].append(item)

print(l1_dic)

输出结果:

{'cat1': ['a', 'b', 'c'], 'cat2': [1, 2, 3], 'cat3': [4, 5, 6, 7, 8]}

方法二:按分类索引分割列表

先获取所有分类在l1中的位置,再根据索引区间提取对应元素,适合需要一次性处理所有区间的场景。

l1 = ['cat1', 'a', 'b', 'c', 'cat2', 1, 2, 3, 'cat3', 4, 5, 6, 7, 8]
l2 = ['cat1', 'cat2', 'cat3']

# 获取每个分类在l1中的索引,添加列表末尾索引处理最后一组元素
indices = [l1.index(cat) for cat in l2]
indices.append(len(l1))

l1_dic = {}
for i in range(len(l2)):
    cat = l2[i]
    # 提取当前分类到下一个分类之间的元素
    elements = l1[indices[i]+1 : indices[i+1]]
    l1_dic[cat] = elements

print(l1_dic)

输出结果与方法一完全一致。

注意事项

  • 若l1存在l2未定义的分类项,方法一会忽略这些项及其后续元素(直到遇到合法分类),方法二则直接跳过未定义分类;
  • 方法二依赖l2中分类与l1中出现顺序一致,若分类顺序不确定,优先使用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:15:33