Main Content

在 MATLAB 中使用 Python 字典

您可以将 Python® 字典 (dict) 转换为 MATLAB 字典或结构体,反之亦然。

  • 您可以使用 dictionary 函数将 Python 字典转换为 MATLAB 字典。您也可以使用 struct 函数将 Python 字典转换为 MATLAB 结构体。

  • 您可以使用 py.dict 函数将 MATLAB 字典或结构体转换为 Python 字典。您还可以将 MATLAB 字典直接传递给 Python 函数,而无需先将其转换为 Python 字典。

将 Python 字典转换为 MATLAB 字典或结构体

如果您有 Python 字典,您可以使用 dictionary 函数将其转换为 MATLAB 字典。(自 R2024a 起)

例如,创建一个 Python 字典并将其转换为 MATLAB 字典。在这种情况下,MATLAB 将键转换为字符串,将值转换为双精度值。

dp = py.dict(soup=3.57,bread=2.29,bacon=3.91,salad=5.00);  
dm = dictionary(dp) 
dm =

  dictionary (string ⟼ double) with 4 entries:

    "soup"  ⟼ 3.5700
    "bread" ⟼ 2.2900
    "bacon" ⟼ 3.9100
    "salad" ⟼ 5

MATLAB 尽可能将 Python 键和值转换为 MATLAB 中的等效类型。如果 Python 字典的键在自动转换为 MATLAB 数据类型时不属于同一数据类型,则这些键包装在元胞数组中。Python 字典值也是如此。

或者,只要 Python 字典键是有效的 MATLAB 标识符,就可以使用结构体函数将 Python 字典转换为 MATLAB 结构体。

sm = struct(dp)
sm = struct with fields:
     soup: 3.5700
    bread: 2.2900
    bacon: 3.9100
    salad: 5

将 MATLAB 字典转换为 Python 字典

MATLAB 将传递给 Python 函数的任何 MATLAB 字典隐式转换为 Python 字典。但是,如果您有 MATLAB 字典,也可以使用 py.dict 将其显式转换为 Python 字典。Python 字典的键和值由 MATLAB 类型的默认转换规则确定,这些规则在将 MATLAB 数据传递给 Python 中进行描述。

例如,创建一个 MATLAB 字典并将其直接传递给 Python 函数 py.len,而无需先将其转换为 Python 字典。

dm = dictionary(["Robert" "Mary" "Jack"],[357 229 391]);   
l = py.len(dm)
l = 
  Python int with properties:

    denominator: [1×1 py.int]
           imag: [1×1 py.int]
      numerator: [1×1 py.int]
           real: [1×1 py.int]

    3

您还可以使用 py.dict 将 MATLAB 字典转换为 Python 字典。

dp = py.dict(dm)
dp = 
  Python dict with no properties.

    {'Robert': 357.0, 'Mary': 229.0, 'Jack': 391.0}

在 MATLAB 中使用 Python 字典方法

您可以在 MATLAB 中使用 Python 字典方法,方法是将该方法作为函数调用并将 Python 字典作为第一个参量传递。

例如,使用 update 方法更改 Python 字典中的键和值。首先,创建一个 Python 字典,其中包含患者和测试结果。然后,更新 test1 的结果。

patientp = py.dict(name="John Doe", ...
    test1 = [], ...
    test2 = [220.0, 210.0, 205.0], ...
    test3 = [180.0, 178.0, 177.5]);

new_test1 = py.dict(test1=[79.0, 75.0, 73.0]);

% This call is equivalent to the Python command patient.update(new_test1)
update(patientp,new_test1);

您可以组合使用 Python 字典和 MATLAB 字典来显示输出。

patientm = dictionary(patientp);

x = sprintf("%s's test1 results: %d %d %d", ...
    string(patientp{"name"}), double(patientm{("test1")}(1)), ...
    double(patientm{("test1")}(2)), double(patientm{("test1")}(3)));
disp(x)
John Doe's test1 results: 79 75 73

另请参阅

|

相关主题