4

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

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

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

?

4

2 回答 2

5

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

let key_vals: &[(&str, PyObject)] = [ ("num", 8.to_object()), ("str", "asd".to_object()) ]
let dict = key_vals.into_py_dict(py);
于 2020-11-05T12:44:04.867 回答
2

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

工作代码片段是:

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

整个主要在这里

需要这个额外的导入:

use pyo3::types::IntoPyDict;

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

py.None()

反而。

变量pypyo3::Python对象。

于 2020-11-05T14:36:51.687 回答