【发布时间】:2020-11-05 09:27:48
【问题描述】:
基于this我可以创建一个同构的Python字典。
如何创建具有混合类型值的字典,例如完成这项工作:
let dict = [ ("num", 8), ("str", "asd") ].into_py_dict(py);
?
【问题讨论】:
基于this我可以创建一个同构的Python字典。
如何创建具有混合类型值的字典,例如完成这项工作:
let dict = [ ("num", 8), ("str", "asd") ].into_py_dict(py);
?
【问题讨论】:
我不是pyo3 的用户,但从Rust 的角度来看,问题在于你试图创建一个异构数组,无论如何这是被禁止的。要解决它,您可以尝试通过使用箱子的PyObject 类型将其转换为同构数组。我无法测试下一个 sn-p 是否有效,我不确定你是否可以让它更简单,但这个想法是成立的:
let key_vals: &[(&str, PyObject)] = [ ("num", 8.to_object()), ("str", "asd".to_object()) ]
let dict = key_vals.into_py_dict(py);
【讨论】:
ToPyObject 返回 type PyObject = Py<PyAny>,但不清楚 that 实现 ToPyObject,因此您可能需要获取 PyAny以某种方式从Py 中脱离出来。
只是为了完成 -- Alex Larionov's idea 工作!
工作代码sn-p是:
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()
改为。
变量py 是pyo3::Python 对象。
【讨论】: