469,584 Members | 2,491 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,584 developers. It's quick & easy.

Parsing a Python dictionary inside a Python extension

Hi,

I would like to pass a dictionary from my Python code to my Python
extension, extract
various values from the dictionary (from within the extension) , modify the
values for the
relevant keys and return the modified dictionary to Python.

Can someone point me to an example of what the C code might look like to do
this?
I tried something like this and it has not worked.
static PyObject * ModifyDictionary( PyObject * self , PyObject * args )
{
int atab1 = 0 , atab2 = 0;
PyObject * vdict = NULL;
PyObject * item = NULL;
PyObject * ndict = NULL;

PyArg_ParseTuple( args , "O" , & vdict );

if ( (item = PyDict_GetItemString( vdict , "atab1")) != NULL
) PyArg_ParseTuple( item , "i" , &atab1 );
if ( (item = PyDict_GetItemString( vdict , "atab2")) != NULL
) PyArg_ParseTuple( item , "i" , &atab2 );

// modify values here and rebuild the dictionary
// ndict = Py_BuildValue( ........create dictionary here ..........)

return ndict ;
}
Can someone tell me where I am going wrong or point me to an example?

Thanks for your help.
Jul 19 '05 #1
2 2561
1. Why not to simplfy the problem. You can extract values from the
dictionari in python (this is fast). Put them in a list (fast). Pass
the list to the extension, handle it and return to python. etc.

2. Use Pyrex.

Jul 19 '05 #2
qu*****@primenet.com wrote:
I tried something like this and it has not worked.
Oh! What did you ask of it, what did you expect and what did you get?

if ( (item = PyDict_GetItemString( vdict , "atab1")) != NULL )
PyArg_ParseTuple( item , "i" , &atab1 );
This code expects a dictionary in which keys 'atab1' and 'atab2' are
singletons of integer. If that's what you want, I'd say it should work.

// ndict = Py_BuildValue( ........create dictionary here ..........)

return ndict ;
}


I personnally prefer 'return Py_BuildValue("");' than returning NULL
pointers (but I don't like to check the doc just to make sure NULL can
be interpreted as None).

In order to build a dictionary you could try:

....
return Py_BuildValue("{s:i,s:i}", "key1", atab1, "key2", atab2);
}

Or even "{s:(i),s:(i)}" to have singletons for values.
HTH
Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Gerrit Holl | last post: by
13 posts views Thread by Roy Smith | last post: by
reply views Thread by suresh191 | last post: by
4 posts views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.