怎样将python中PyObject 类型转换成c++中string类型

iWebCoder 2013-07-01 10:19:35
c++中怎样读出这个字典中的key和value值c++中怎样读取python字典,获得字典中的key值(一个key中有多个值)和value值? 比如python中的字典为:node={(‘a’,‘b’):‘1q’,(‘b’,‘c’):‘2q’,(‘c’,‘d’):‘3q’}
怎样将python中PyObject 类型转换成c++中string类型?PyString_AsString只能转换key中只有一个值的,一个key中有多个值就会出错。用PyString_AS_STRING转换会出现乱码,求解。
...全文
2208 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-07-03
  • 打赏
  • 举报
回复 1
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。
www_adintr_com 2013-07-02
  • 打赏
  • 举报
回复
PyObject *key = PyList_GetItem(key_dict, i); 这里返回的是一个元组 size_t lent3 = PyObject_Length(key); 错! 要用 PyTuple_GET_SIZE PyObject * keylist3 = PyList_GetItem(key,k); 错! 要用 PyTuple_GetItem
fenglingcaolily 2013-07-02
  • 打赏
  • 举报
回复
有多个 key 的时候,用元祖怎么不对呢?是不是列表啊?我这样写为什么不对呢? cal.py文件代码如下: def mix(): r={('a','b','c'):'1aaaaa', ('b','c','d'):'2bbbbb', ('c','d','e'):'3ccccc' } c++中代码如下: ...... Py_Initialize(); PyObject * pModule =NULL , *first = NULL, *pDict = NULL; pModule = PyImport_ImportModule("cal"); first = PyObject_GetAttrString(pModule,"mix"); PyObject * pyValue = PyObject_CallFunction(first, NULL); PyObject *key_dict = PyDict_Keys(pyValue); //return PyListObject size_t len=PyDict_Size(pyValue); for(size_t i=0;i<len;++i) { PyObject *key = PyList_GetItem(key_dict, i); size_t lent3 = PyObject_Length(key); for (size_t k=0;k<lent3;++k) { PyObject * keylist3 = PyList_GetItem(key,k); string key3 = PyString_AsString(keylist3); cout<<key3<<endl; } PyObject *value = PyDict_GetItem( pyValue, key); //查询value string cval = PyString_AsString(value); //转换结果 //string s = PyString_AsString(key); cout<<cval<<endl; } Py_Finalize(); system("pause"); return 0 ; ......
www_adintr_com 2013-07-01
  • 打赏
  • 举报
回复
引用 5 楼 GSCSD1 的回复:
[quote=引用 4 楼 adlay 的回复:] 你的判断 PyObject 的类型再用对于的方法把它转成 C++ 类型
PyString_AsString只能转换key中只有一个值的,一个key中有多个值就会出错。用PyString_AS_STRING转换会出现乱码,这个呢???? [/quote] 有多个 key 的时候就不是 string 类型了啊, 按照你的写法是一个元组, 的用 PyTuple_Size 获取个数, 用 PyTuple_GetItem 来获取每一个, 对 PyTuple_GetItem 返回的再用 PyString_AsString
iWebCoder 2013-07-01
  • 打赏
  • 举报
回复
引用 4 楼 adlay 的回复:
你的判断 PyObject 的类型再用对于的方法把它转成 C++ 类型
PyString_AsString只能转换key中只有一个值的,一个key中有多个值就会出错。用PyString_AS_STRING转换会出现乱码,这个呢????
www_adintr_com 2013-07-01
  • 打赏
  • 举报
回复
你的判断 PyObject 的类型再用对于的方法把它转成 C++ 类型
iWebCoder 2013-07-01
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
1. 用 Pydict_xxxx 的一系列函数撒. 2. PyString_AsString 转的 PyObject 在 python 中是一个字符串吗?
1、Pydict_xxxx 的一系列函数得到得是PyObject类型,怎么转换成c++格式的呢? 2、PyString_AsString 只能转换key中只有一个值的时候,一个key中多个值的时候就会出错
fenglingcaolily 2013-07-01
  • 打赏
  • 举报
回复
1、Pydict_xxxx 的一系列函数得到得是PyObject类型,怎么转换成c++格式的呢? 2、PyString_AsString 只能转换key中只有一个值的时候,一个key中多个值的时候就会出错
www_adintr_com 2013-07-01
  • 打赏
  • 举报
回复
1. 用 Pydict_xxxx 的一系列函数撒. 2. PyString_AsString 转的 PyObject 在 python 中是一个字符串吗?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧