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

Python:基于三维数组首列构建字典及生成二维数组的问题

按首列标签分组数据到字典的解决方案

没问题,我来帮你搞定这个分组问题!根据你给出的示例数据和需求,我们要把allValues里首行的字符串作为字典的键,然后把对应列的所有数值行元素整理成二维数组作为对应的值对吧?

核心思路

首先我们得先搞清楚每个标签(比如str1、str2)对应哪些列的索引,然后针对每个标签,遍历所有数据行,提取这些索引对应的元素组成子数组,最后把所有子数组汇总成二维数组,关联到字典的对应键上。

代码实现(基础版)

下面是最直观的实现方式,适合新手理解每一步的逻辑:

allValues = [
    ["str1","str1","str1","str1","str1","str1","str1","str2","str2","str2","str2","str2"],
    [1,2,3,4,5,6,7,8,9,10,11,12],
    [1,2,3,4,5,6,7,8,9,10,11,12]
]

# 第一步:建立标签与对应列索引的映射
label_to_indices = {}
for idx, label in enumerate(allValues[0]):
    if label not in label_to_indices:
        label_to_indices[label] = []
    label_to_indices[label].append(idx)

# 第二步:遍历数据行,生成结果字典
result = {}
for label, indices in label_to_indices.items():
    result[label] = []
    for row in allValues[1:]:
        # 提取当前行中属于该标签的所有元素
        sub_row = [row[i] for i in indices]
        result[label].append(sub_row)

# 查看结果
print(result)

运行后你会得到这样的输出:

{
    'str1': [[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]],
    'str2': [[8, 9, 10, 11, 12], [8, 9, 10, 11, 12]]
}

代码优化(简洁高效版)

如果你的数据量比较大,或者想让代码更简洁,可以用collections.defaultdict和推导式来简化:

from collections import defaultdict

allValues = [
    ["str1","str1","str1","str1","str1","str1","str1","str2","str2","str2","str2","str2"],
    [1,2,3,4,5,6,7,8,9,10,11,12],
    [1,2,3,4,5,6,7,8,9,10,11,12]
]

# 快速建立标签到索引的映射
label_to_indices = defaultdict(list)
for idx, label in enumerate(allValues[0]):
    label_to_indices[label].append(idx)

# 用字典推导式直接生成结果
result = {
    label: [[row[i] for i in indices] for row in allValues[1:]]
    for label, indices in label_to_indices.items()
}

print(result)

这个版本的逻辑和基础版完全一致,但代码更紧凑,运行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:54