【发布时间】:2021-07-14 22:59:41
【问题描述】:
假设我有这样的东西(注意 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()
}
现在在 python 中
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 nestDict = rootDict["a"] 声明为py::dict,假设rootDict["a"] 的值是py::dict(以及py::list 的等价物),但如果rootDict["a"] 的值不是py::dict,声明将导致TypeError
所以最终的问题是,是否可以分别访问py::dict 或py::list 中的键或索引的值,而无需通过..._accessor 中间体?或者如果没有,有没有办法将这些结构转换为更容易以我希望的方式操作的东西?
【问题讨论】:
标签: python c++ nested nested-lists pybind11