On Sun, 13 Mar 2022 at 10:30, Jen Kris <jenk...@tutanota.com> wrote: > > > Chris, you were right to focus on the list pDictData itself. As I said, > that is a list of 2-tuples, but I added each of the 2-tuples with > PyList_Append, but you can only append a tuple to a list with the extend > method. However, there is no append method in the C API as far as I can tell > -- hence pDictData is empty. I tried with PyList_SetItem but that doesn't > work. Do you know of way to "extend" a list in the C API. >
Hmm. Not entirely sure I understand the question. In Python, a list has an append method, which takes any object (which may be a tuple) and adds that object to the end of the list: >>> x = ["spam", "ham"] >>> x.append((1,2)) >>> x ['spam', 'ham', (1, 2)] A list also has an extend method, which takes any sequence (that also includes tuples), and adds *the elements from it* to the end of the list: >>> x = ["spam", "ham"] >>> x.extend((1,2)) >>> x ['spam', 'ham', 1, 2] The append method corresponds to PyList_Append, as you mentioned. It should be quite happy to append a tuple, and will add the tuple itself, not the contents of it. So when you iterate over the list, you'll get tuples. Extending a list can be done with the sequence API. In Python, you can write extend() as +=, indicating that you're adding something onto the end: >>> x = ["spam", "ham"] >>> x += (1, 2) >>> x ['spam', 'ham', 1, 2] This corresponds to PySequence_InPlaceConcat, so if that's the behaviour you want, that would be the easiest way to do it. Based on your other comments, I would suspect that appending the tuples is probably what you want here? ChrisA -- https://mail.python.org/mailman/listinfo/python-list