我正在努力解决以下问题:给定一个以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))}
答案 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)