如何将嵌套字典转换为 3D 数组
Posted
技术标签:
【中文标题】如何将嵌套字典转换为 3D 数组【英文标题】:How to Convert a Nested Dictionary to a 3D array 【发布时间】:2018-04-19 13:39:04 【问题描述】:我正在尝试将嵌套字典转换为 Python3 中的 3D 数组。我有一个来自另一篇文章的函数,它完成了将 Nest Dict 转换为列表,如下所示
def Convert_Nest_Dictionary_2_List(Dictionary):
local_list = []
for key, value in Dictionary.items():
local_list.append(key)
local_list.extend(Convert_Nest_Dictionary_2_List(value))
return local_list
当我使用这个功能时,我得到了错误:
`'numpy.ndarray' object has no attribute 'items'`
我假设这是因为我的嵌套字典中的对应值是具有形状 (96,144)
的多维数组,而不是单个值。
我的嵌套字典很大,所以我只在下面显示它的一部分。输入 dict RCP45
返回:
'Sim1': '01': '2005': array([[ 244.94081116, 244.95672607,...
有 3 个 Sims,每个 sim 中有 12 个键(用于月份),每个月有 61 个键(2005-2065 表示年份),每个对应的值将全球空间温度数据表示为 (96,144)
数组(纬度和经度)。
我希望得到的数组是 (2196,94,144)
的形状,其中 2196 代表 3*12*61 (sims* Months *years)
我将如何修改函数来实现这一点?或者也许一起使用不同的方法来实现这一点?
非常感谢!
【问题讨论】:
【参考方案1】:您需要进行基本情况检查(当递归到达您的 numpy 数组时)。大致如下:
def Convert_Nest_Dictionary_2_List(Dictionary):
local_list = []
if isinstance(Dictionary, numpy.ndarray):
return np_array_to_whatever_youre_trying_to_get(Dictionary)
for key, value in Dictionary.items():
local_list.append(key)
local_list.extend(Convert_Nest_Dictionary_2_List(value))
return local_list
虽然更改变量名可能是合适的。
【讨论】:
抱歉,当我复制该位时,我使用了.items()
函数,只需输入字典名称RCP45
即可返回'Sim1': '01': '2005': array([[ 244.94081116, 244.95672607,...
。我是使用嵌套字典的新手,但如果我没记错的话,这是一个嵌套字典?
是的,就是这样。尽管我仍然对您如何在数据结构的叶子(形状为 (96, 144) 的 numpy.ndarray)处获得二维数组感到困惑。我原以为这会使您的数据成为 4D 而非 3D。以上是关于如何将嵌套字典转换为 3D 数组的主要内容,如果未能解决你的问题,请参考以下文章