繁体   English   中英

pybind11:使用嵌套的 py::dict 和 py::list?

[英]pybind11: working with nested py::dict and py::list?

说我有这样的东西(注意pybind11/pybind11.h and pybind11/stl.h包括)

namespace py = pybind11;

int nestedObjSize(py::list plist){
    // This is what I would like to achieve, but it doesn't work

    return plist[0].size()
}

int nestedObjSize(py::dict pdict){
    // Again doesn't work, but this is what I essentially want to do
    
    return pdict["a"].size()
}

现在在蟒蛇

bindedModule.nestedObjSize([{"a": 1, "b": 2}])

>> 2

bindedModule.nestedObjSize([[1,2,3]])

>> 3


bindedModule.nestedObjSize({"a": {"b": 1, "c": 2"}})

>> 2

问题源于索引py::listpy::dict时的数据结构,分别是py::detail::list_accessorpy::detail::item_accessor ,而不仅仅是( py::listpy::dict )。

我知道py::detail::item_accessor可以被声明为py::dict经由py::dict nestDict = rootDict["a"]假定的值rootDict["a"]py::dict (和py::list等效项)但如果值rootDict["a"]不是py::dict ,则声明将导致TypeError


所以最终,问题是,是否可以分别访问py::dictpy::list中的键或索引的值,而无需通过..._accessor中间体? 或者,如果没有,有没有办法将这些结构转换为更容易以我想要的方式操纵的东西?

使用py::len()而不是size()

namespace py = pybind11;

int nestedObjSize(py::list plist)
{
    return py::len(plist[0]);
}

int nestedObjSize(py::dict pdict)
{
    return py::len(pdict["a"]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM