“导入”到 Rust 中,然后使用 Python 字典

"Import" into Rust and then use a Python dict

提问人:mike rodent 提问时间:10/4/2023 最后编辑:wjandreamike rodent 更新时间:10/4/2023 访问量:70

问:

当我说“导入”时,我的意思是“作为参数传递”到 Rust 模块中的 a。pyfunction

我在 Python 中的函数如下所示:

index_ops.update_index(PATH_STR, INDEX_NAME, hits)

前两个参数是 Strings,第二个参数是 s 列表。这些 s 可能具有也可能不都具有相同的键和值类型。每个键中的键“_source”都有一个值,该值本身是 .我很欣赏,如果每个都有相同的键和值类型,它可能会让生活更轻松。dictdictdictdictdict

这是我到目前为止尝试过的那种事情:

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,反之亦然。

PYO3型

评论

2赞 kmdreko 10/4/2023
“理想情况下,我想找到一种将这些 PyObject转换为常规 Rust 类型的方法” - 您可能对 PyO3 用户指南的这一部分感兴趣。
0赞 mike rodent 10/4/2023
将退房。希望如果我不说“T 'anks”,这条评论不会被自动删除。

答: 暂无答案