使用scipy.io.loadmat从.mat Matlab文件中将字典键转换为具有相同值的Python中的变量名

StackOverflow https://stackoverflow.com/questions/6369535

我正在尝试使用scipy.io.loadmat从.mat文件加载的基本字典temp= {'key':array([1,2])}。将loadmat()返回的Python词典文件中的键转换为变量名,其值与代表键的值相同。

例如: 通用标签

变成 通用标签

我知道如何使用temp.keys()来获取密钥。然后,抓取这些项目很容易,但是如何强制temp.keys()中的字符串列表成为变量名而不是字符串。

我希望这是有道理的,但这可能真的很容易,我只是想不出该怎么做。

欢呼

有帮助吗?

解决方案

在python中,方法参数可以作为字典使用** Magic传递: 通用标签

其他提示

最好的办法是使用temp['key']。但是,要回答这个问题,您可以使用exec函数。这样做的好处是您不必硬编码任何变量名或将自己限制在函数内部即可工作。 通用标签

注意::仅当您从模块中导入了特定功能时,此方法才有效。如果由于代码实践或需要导入的庞大功能而不想执行此操作,则可以在入口之前编写一个函数来串联模块名称。输出与前面的示例相同。 通用标签

虽然这不是最佳的代码实践,但它对我测试过的所有示例都适用。

更好的方法可能是将数据填充到单独的对象中 通用标签

这大约很容易交互使用,不需要任何魔法。 Matlab用户也应该可以。

编辑:事实证明,以下内容在大多数情况下实际上并不起作用。太糟糕了,魔法太重要了。

但是,如果您想融入魔法,可以做类似的事情 通用标签

这将很好地交互工作,您甚至可以通过混入locals()来隐藏对sys._getframe().f_back.f_locals的访问。

但是,这不适用于函数: 通用标签

问题在于上面的a在编译时绑定到了全局变量,因此Python不会尝试在局部变量中查找它。

虽然我只建议直接使用字典并访问诸如temp['key']之类的数组,但是如果您提前知道所有变量名,则可以编写一个函数将其提取到各个变量中: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top