NumPy:如何从元素为字典的数组中提取值生成新数组?
NumPy没有专门针对字典元素数组的内置专用方法,但可以通过向量化操作实现比你当前方案更简洁高效的实现,不需要手动循环赋值。
1. 提取指定key对应值的数组
用np.vectorize封装字典取值逻辑,直接生成和原数组形状一致的值数组:
import numpy as np # 封装获取指定key的逻辑,可通过get的第二个参数设置key不存在时的默认返回值 get_target_key = np.vectorize(lambda dict_item: dict_item.get("key")) # 直接生成值数组 value_array = get_target_key(old_array)
输出的value_array就是你需要的[["value","othervalue"],["notvalue","value"]]格式的数组。
2. 生成布尔判断数组
有两种实现方式,都可以完全替代你当前的循环写法:
方式一:基于提取的值数组直接判断
如果已经提取了值数组,直接用np.isin批量判断即可:
bool_array = np.isin(value_array, ["value", "othervalue"])
方式二:一步直接生成布尔数组
不需要先提取值,直接把判断逻辑封装到向量化函数里:
check_condition = np.vectorize(lambda dict_item: dict_item.get("key") in {"value", "othervalue"}) bool_array = check_condition(old_array)
得到的bool_array就是你需要的[[True, True],[False, True]]格式的布尔数组。
补充说明
- 上述方案的性能远高于手动循环赋值,数组规模越大优势越明显,代码可读性也更高。
- 如果你的字典结构更复杂,或者需要高频操作这类数据,也可以考虑将数组转换为Pandas的DataFrame或者NumPy结构化数组,更适合结构化数据的批量操作。
内容的提问来源于stack exchange,提问作者Jazz
相关产品推荐
相关产品推荐

