使用numpy.savez在字典中定义的名称-值

时间:2018-08-14 21:09:49

标签: python

我正在努力解决以下问题:给定一个以numpy数组作为值的字典,例如$json_string = '{ "response_code": 200, "info": { "days": [ { "code": "A", "runs": "111" }, { "code": "B", "runs": "222" }, { "code": "C", "runs": "333" } ], "name": "SUPER MARIO", "number": "010203", "classes": [ { "points": "6523", "name": "ABC", "available": "N" }, { "points": "4253", "name": "XYZ", "available": "N" }, { "points": "2323", "name": "JOHN", "available": "N" }, { "points": "5236", "name": "TAMIL", "available": "N" } ] } }'; $jsondata = $json_string; $arr = json_decode($jsondata, true); foreach($arr as $k=>$v) { echo $k."<br>"; } ,我想使用字典关键字中的名称将数组保存到npz文件中:

echo "".$arr['info']['classes'][0]['points']." ".$arr['info']['classes'][0]['name']."<br/>";
echo "".$arr['info']['classes'][1]['points']." ".$arr['info']['classes'][1]['name']."<br/>";
echo "".$arr['info']['classes'][2]['points']." ".$arr['info']['classes'][2]['name']."<br/>";
echo "".$arr['info']['classes'][3]['points']." ".$arr['info']['classes'][3]['name']."<br/>";

错误出现在a={'xarray':np.ones((2,2))}中:

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))}

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则应尝试以下行: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)