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
相关产品推荐
相关产品推荐

