[英]pybind11: convert py::list to std::vector<std::string>
[英]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::list
或py::dict
时的数据结构,分别是py::detail::list_accessor
或py::detail::item_accessor
,而不仅仅是( py::list
和py::dict
)。
我知道py::detail::item_accessor
可以被声明为py::dict
经由py::dict nestDict = rootDict["a"]
假定的值rootDict["a"]
是py::dict
(和py::list
等效项)但如果值rootDict["a"]
不是py::dict
,则声明将导致TypeError
所以最终,问题是,是否可以分别访问py::dict
或py::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.