首页 > 解决方案 > 使用字典中定义的名称值与 numpy.savez

问题描述

我正在努力解决以下问题:给定一个以 numpy 数组作为值的字典,例如,a={'xarray':np.ones((2,2))}我想将数组保存到 npz 文件中,名称来自字典键:

np.savez('test.npz',a.keys()=a['xarray'])

错误在a.keys

SyntaxError: keyword can't be an expression.

我需要以某种方式将密钥转换为表达式。我尝试使用eval函数但没有成功。

谢谢,米哈伊尔

编辑:

为了澄清事情,我希望结果等同于以下内容:

np.savez('test.npz', xarray = np.ones((2,2)))

我的数组的名称在字典的第一个键中指定,而数组本身在第一个值中:a={'xarray':np.ones((2,2))}.

尝试:np.savez('test.npz',format(list(a.keys())[0])=list(a.values())[0])再次返回SyntaxError: keyword can't be an expression

标签: python

解决方案


如果我对您的理解正确,您应该尝试以下内容:np.savez('{}.npz'.format(list(a.keys())[0])). 这会将文件名设置为给定字典中的第一个键。

您得到的错误是正确的,因为您尝试将其设置为表达式a.keys()的值。a['xarray']此外,据我所知,python 不会允许这样做。

编辑: 我刚刚讲完 np.savez 函数的作用,我误解了你。所以正确的事情(如果我现在是正确的)是这样做:

kwargs = {key: a[key] for key in a.keys()}
np.savez('test.npz', **kwargs)

请尝试说这是否是您想要的:)

编辑 2: 对于只有第一个键:

kwargs = {key: a[key] for key in [list(a.keys())[0]]}
np.savez('test.npz', **kwargs)

推荐阅读