如何优雅地将字典列表按分组转换为NumPy数组?
字典列表按键分组转换为NumPy数组集合
下面提供几种优雅的实现思路:
方法一:用collections.defaultdict高效分组
借助defaultdict自动初始化列表容器,遍历过程中完成分组,最后批量转换为NumPy数组:
import numpy as np from collections import defaultdict data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}] grouped = defaultdict(list) for d in data: # 提取单个字典的唯一键值对 key, val = next(iter(d.items())) grouped[key].append(val) # 转换为NumPy数组集合 result = {k: np.array(v) for k, v in grouped.items()}
这个方法时间复杂度为O(n),处理大规模数据时效率较高。
方法二:纯Python字典实现(无额外依赖)
如果不想导入collections模块,可手动判断键的存在性完成分组:
import numpy as np data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}] grouped = {} for d in data: key, val = next(iter(d.items())) if key not in grouped: grouped[key] = [] grouped[key].append(val) result = {k: np.array(v) for k, v in grouped.items()}
逻辑清晰,无需额外依赖,适合轻量场景。
方法三:用pandas快速处理(适合复杂扩展)
如果后续有数据清洗、统计分析需求,用pandas的分组能力会更便捷:
import numpy as np import pandas as pd data = [{'Cool': 128}, {'Cool': 51}, {'Hot': 75}, {'Hot': 62}, {'Archive': 144}, {'Archive': 12}] # 转换为DataFrame自动对齐相同键 df = pd.DataFrame(data) # 提取每列非空值并转为NumPy数组 result = {col: df[col].dropna().to_numpy() for col in df.columns}
该方法适合处理包含多维度、需要后续分析的数据集。
内容的提问来源于stack exchange,提问作者LDonSOvrfw
相关产品推荐
相关产品推荐

