Doesn't that give the overhead of a tuple? I would check this myself but I don't have access to a Cython-enabled computer at the moment. :(
On Sat, Nov 15, 2008 at 11:40 PM, Robert Bradshaw <[EMAIL PROTECTED]> wrote: > On Nov 15, 2008, at 11:28 PM, Aaron DeVore wrote: > >> So would this be better? >> >> for k in d: >> v = d[k] >> # Do stuff with k and v > > No, the > > for k, v in d.items(): > ... > > is best. > > - Robert > > > >> >> On Sat, Nov 15, 2008 at 1:53 PM, Robert Bradshaw >> <[EMAIL PROTECTED]> wrote: >>> On Nov 15, 2008, at 1:17 PM, Aaron DeVore wrote: >>> >>>> I'm trying to use PyDict_Next to iterate over a dict in a way >>>> that is >>>> identical to this statement: >>>> for k, v in d.items(): >>>> # do stuff with key and value >>>> >>>> PyDict_Next has the signature: >>>> int PyDict_Next(PyObject *dictionary, Py_ssize_t *pos, PyObject >>>> **key, >>>> PyObject **value) >>>> >>>> >>>> The basic idea is that the dict uses pos to track which key it is >>>> on. >>>> The key is then assigned to the key pointer and the corresponding >>>> value is assigned to the value pointer. It can really help >>>> efficiency >>>> because it doesn't involve iterators, tuples, etc. >>>> >>>> The most obvious code is the following: >>>> >>>> cdef int pos = 0 >>>> cdef object key, value >>>> while PyDict_Next(d, &pos, &key, &value): >>>> # do stuff with key and value >>>> >>>> However, apparently &python_object is not legal and I'm running into >>>> odd type issues with &pos. Is there a way to get around those >>>> limitations? >>> >>> Yes, declare them to be PyObject* rather than object. Then you'll >>> have to do all refcounting manually (as you would have had to do >>> anyways, as PyDict_Next doesn't decref its input). However, I doubt >>> iterating over the dict manually like that will be a significant >>> speed increase than the basic Python way of doing it. >>> >>> - Robert >>> >>> _______________________________________________ >>> Cython-dev mailing list >>> [email protected] >>> http://codespeak.net/mailman/listinfo/cython-dev >>> >> _______________________________________________ >> Cython-dev mailing list >> [email protected] >> http://codespeak.net/mailman/listinfo/cython-dev > > _______________________________________________ > Cython-dev mailing list > [email protected] > http://codespeak.net/mailman/listinfo/cython-dev > _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
