如何使用 PyO3 在 Rust 中创建异构 Python 字典?

tun*_*gli 5 rust pyo3

基于我可以创建一个同质的 Python 字典。

如何创建具有混合类型值的字典,例如使其工作:

let dict = [ ("num", 8), ("str", "asd") ].into_py_dict(py);
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 7

我不是 的用户pyo3,但从 Rust 的角度来看,问题在于你试图创建一个异构数组,无论如何这是被禁止的。为了解决这个问题,您可以尝试利用PyObject板条箱的类型将其转换为同质数组。我无法测试下一个片段是否有效,我不确定是否可以使其更简单,但这个想法是成立的:

let key_vals: &[(&str, PyObject)] = [ ("num", 8.to_object()), ("str", "asd".to_object()) ]
let dict = key_vals.into_py_dict(py);
Run Code Online (Sandbox Code Playgroud)


tun*_*gli 6

只是为了完成——亚历克斯·拉里奥诺夫的想法可行!

工作代码片段是:

let key_vals: Vec<(&str, PyObject)> = vec![
    ("num", 8.to_object(py)), ("str", "asd".to_object(py))
];
let dict = key_vals.into_py_dict(py);
Run Code Online (Sandbox Code Playgroud)

整体主要在这里

需要额外导入:

use pyo3::types::IntoPyDict;
Run Code Online (Sandbox Code Playgroud)

另外,请注意,如果您碰巧需要将 PythonNone值放入字典中但.to_object(py)失败,请使用:

py.None()
Run Code Online (Sandbox Code Playgroud)

反而。

变量pypyo3::Python对象。