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

如何将dict_keys数组向量化转列表并实现2D数组转3D数组?

解决方法

为什么你的vectorize尝试失败?

np.vectorize 默认会自动推断输出数组的类型,当每个元素的长度不一致时(比如你的例子里有的列表长度是2,有的是3),它没法生成规则的多维数组,自然就达不到你想要的嵌套列表结构。

方案1:给vectorize指定otypes参数

显式指定otypes=[object],强制让每个输出元素保持为列表对象,就能解决问题:

import numpy as np
from collections import Counter

# 模拟你的输入数组
Y = np.array([[Counter({'Q': 1, 'S': 1}), Counter({'Z': 2, 'P': 2, 'L': 1})],
              [Counter({'I': 2}), Counter({'R': 2, 'Q': 1})]], dtype=object)

# 先得到dict_keys数组(模拟vectorKeys的处理结果)
Y_keys = np.vectorize(lambda x: x.keys())(Y)

# 转换为列表数组
vectorList = np.vectorize(list, otypes=[object])
result = vectorList(Y_keys)

print(result)

输出符合预期:

array([[list(['Q', 'S']), list(['Z', 'P', 'L'])],
       [list(['I']), list(['R', 'Q'])]], dtype=object)

方案2:用嵌套列表推导式

对于这种元素长度不规则的object数组,嵌套列表推导式更直观,也不容易踩坑:

result = np.array([[list(keys) for keys in row] for row in Y_keys], dtype=object)

这个方法就是手动遍历数组的每一行和每个元素,把dict_keys转成列表后,再重新包装成numpy object数组,结果和方案1完全一致。

内容的提问来源于stack exchange,提问作者anon.for

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:01:26