我如何在MATLAB中使用Python字典对象?

6
我正在使用MATLAB 2014b的新功能,可以直接从MATLAB中调用Python,并在工作区中获取Python对象(就像您长期以来一直可以使用Java一样)。我已经成功调用了一个函数并将一个字典存入了工作区,但是我不知道如何从中获取值。在这种情况下,我有一个充满了字典的字典,所以我不能像他们在示例中那样将其转换为MATLAB单元格。
因此,具体问题是:如果我在MATLAB中有一个名为“ A”的字典,如何取出子字典A ['2']?

请贴出能够重新生成你所处理数据的代码。参考MVCE - sco1
由于各种原因,我无法分享确切的代码,但MATLAB部分如下:A = py.pythonfile.pythonfunc(arg),并且A以字典形式返回。如果'2'是A中的一个键,我可以在python中使用A ['2'],但我不知道MATLAB中的等效方法。谢谢。 - Mastiff
1
无论是否是确切的代码都不重要,重要的是提供的代码能够复现问题。 - sco1
1个回答

3
通过查阅MATLAB外部接口文档,Python的dict类型本质上与containers.Map相同。您需要使用values函数来提取您想要的某个键的值。因此,如果您的Python字典存储在A中,并且您想使用'2'作为索引到字典中,则应该这样调用values
val = values(A, '2');

因此,val将包含与键'2'相关联的值。MATLAB还可以使用多个键,并返回每个键对应的一个值。因此,您也可以执行以下操作:

val = cell(values(A, {'1', '2', '3'}));
val将是一个三元素的单元格数组,其中每个元素都是您输入的关联键的值。必须将values的输出转换为cell数组,因为这通常是Python中的列表。为了在MATLAB中使用这些结果,我们需要转换为cell

因此,当您将'1'用作键时,val {1}将是字典输出。同样,当您使用'2'作为键时,val {2}将是字典输出,依此类推。


以下是containers.Map对象的一些其他操作。如果要获取字典中的所有键,请使用keys函数:

k = keys(A);

如果你仅仅使用字典的values,就像这样:

val = cell(values(A));

这段代码会将你的字典中所有的键值对都存储到一个单元数组中。

如果你想要更新Python字典中的某个键,可以使用update函数:

update(A,py.dict(pyargs('4',5.677)));

在这里,我们使用字典A,并更新键值对,其中键是'4',新值为5.677


1
还有20k!恭喜啊伙计! - Divakar
@Divakar 谢谢你,我的朋友 :) 花了一段时间,但最终做到了! - rayryeng
1
这真是疯狂的一年,我们在这里都已经快一年了,这一年真是太不寻常了(充满了事件和许多学习)!! :) - Divakar
1
@Divakar 哦,是的!这绝对是一场冲刺。自从我开始在这里发布帖子以来,我学到的关于Matlab的知识比我在研究生阶段学到的还要多。 - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接