如何使用Python C API使用自定义键对列表进行排序?

如何使用Python C API使用自定义键对列表进行排序?,python,python-c-api,Python,Python C Api,Python C API提供了以下列表排序方法: int-PyList\u排序(PyObject*list) 对列表中的项目进行排序。 成功时返回0,失败时返回-1。这相当于list.sort() 但是,没有参数可用于提供自定义排序键(Python中的list.sort())。用自定义键对C中的Python列表进行排序的最佳方法是什么?这就成功了: static PyObject *sortWithKey(PyObject *list, PyObject *key) { PyObject

Python C API提供了以下列表排序方法:

int-PyList\u排序(PyObject*list)

对列表中的项目进行排序。 成功时返回
0
,失败时返回
-1
。这相当于
list.sort()

但是,没有参数可用于提供自定义排序键(Python中的
list.sort()
)。用自定义键对C中的Python列表进行排序的最佳方法是什么?

这就成功了:

static PyObject *sortWithKey(PyObject *list, PyObject *key) {
    PyObject *argTuple = PyTuple_New(0);
    PyObject *keywords = PyDict_New();
    PyObject *keyString = PyUnicode_FromString("key");
    PyDict_SetItem(keywords, keyString, key);

    PyObject *sortMethod = PyObject_GetAttrString(list, "sort");

    PyObject *retVal = PyObject_Call(sortMethod, argTuple, keywords);

    Py_DECREF(keyString);
    Py_DECREF(keywords);
    Py_DECREF(argTuple);

    return retVal;
}
请注意,我对编写Python模块非常陌生,因此这里的内存管理/异常处理可能不是一个好的模型