问题描述
基于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()
相反。
变量py
是pyo3::Python
对象。