提问人:mike rodent 提问时间:10/4/2023 最后编辑:wjandreamike rodent 更新时间:10/4/2023 访问量:70
“导入”到 Rust 中,然后使用 Python 字典
"Import" into Rust and then use a Python dict
问:
当我说“导入”时,我的意思是“作为参数传递”到 Rust 模块中的 a。pyfunction
我在 Python 中的函数如下所示:
index_ops.update_index(PATH_STR, INDEX_NAME, hits)
前两个参数是 Strings,第二个参数是 s 列表。这些 s 可能具有也可能不都具有相同的键和值类型。每个键中的键“_source”都有一个值,该值本身是 .我很欣赏,如果每个都有相同的键和值类型,它可能会让生活更轻松。dict
dict
dict
dict
dict
这是我到目前为止尝试过的那种事情:
use pyo3::types::IntoPyDict;
#[pyfunction]
fn update_index(py: Python, dir_root_path_str: &str, index_name:
&str, hits: Vec<std::collections::HashMap<String, PyObject>>) {
for hit in hits {
info!("hit {:?} type {}", hit, utilities::str_type_of(&hit));
// prints this: "hit {"_score": Py(0x22e9a2a12d0), "_index": Py(0x22e961a3190), "_id": Py(0x22e9a452060),
"_source": Py(0x22e9a4fdb80)} type std::collections::hash::map::HashMap<alloc::string::String, pyo3::instance::Py<pyo3::types::any::PyAny>>"
let source = &hit["_source"];
info!("source {:?} type {}", source, utilities::str_type_of(&source));
// prints this: "source Py(0x22e9a4fdb80) type &pyo3::instance::Py<pyo3::types::any::PyAny>"
// let dict = source.into_py_dict(&source); // doesn't compile: " the method `into_py_dict` exists for reference `&Py<PyAny>`,
but its trait bounds were not satisfied"
...
...理想情况下,我想找到一种方法将这些 s(如果它们都是这样的话)转换为常规的 Rust 类型。PyObject
我想如果我知道所有的键和值类型,我就可以弄清楚如何做到这一点。
但是,如果我不知道所有键和值类型,我可能有什么选择?
也许文档中的某个地方教过这种东西?我找到了这个页面,但它真的没有告诉我我需要理解什么。出于某种原因,该手册似乎更多地是关于从 Rust 调用 Python,反之亦然。
答: 暂无答案
评论
PyObject
转换为常规 Rust 类型的方法” - 您可能对 PyO3 用户指南的这一部分感兴趣。