如何使用Python C API使用自定义键对列表进行排序?
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
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模块非常陌生,因此这里的内存管理/异常处理可能不是一个好的模型