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

How to create a heterogeneous Python dict in Rust with PyO3?

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

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

let dict = [ ("num", 8), ("str", "asd") ].into_py_dict(py);

?

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

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

仅供完成 -- 有效!

工作代码片段是:

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);

全主here.

需要额外导入:

use pyo3::types::IntoPyDict;

此外,请注意,如果您恰好需要将 Python None 值放入字典,其中 .to_object(py) 失败,请使用:

py.None()

相反。

变量 pypyo3::Python 对象。