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

问题描述

基于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);
,

只为完成-Alex Larionov's idea有用!

工作代码段为:

let key_vals: Vec<(&str,PyObject)> = vec![
    ("num",8.to_object(py)),"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对象。