Commit 491a4cb8 authored by Raymond Hettinger's avatar Raymond Hettinger

Fix TODO: do the sort by just the key, not the key/value pair.

parent bcf6f92d
...@@ -1339,6 +1339,8 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss ...@@ -1339,6 +1339,8 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
PyObject *item = NULL; PyObject *item = NULL;
int skipkeys; int skipkeys;
Py_ssize_t idx; Py_ssize_t idx;
PyObject *mapping;
static PyObject *code = NULL;
if (open_dict == NULL || close_dict == NULL || empty_dict == NULL) { if (open_dict == NULL || close_dict == NULL || empty_dict == NULL) {
open_dict = PyUnicode_InternFromString("{"); open_dict = PyUnicode_InternFromString("{");
...@@ -1379,25 +1381,28 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss ...@@ -1379,25 +1381,28 @@ encoder_listencode_dict(PyEncoderObject *s, PyObject *rval, PyObject *dct, Py_ss
*/ */
} }
items = PyObject_CallMethod(dct, "items", ""); /* XXX key=itemgetter(0) */
if (items == NULL)
goto bail;
if (PyObject_IsTrue(s->sort_keys)) { if (PyObject_IsTrue(s->sort_keys)) {
PyObject *rv; if (code == NULL) {
PyObject *itemlist; code = Py_CompileString("sorted(d.items(), key=lambda kv: kv[0])",
"_json.c", Py_eval_input);
itemlist = PySequence_List(items); if (code == NULL)
Py_DECREF(items); goto bail;
if (itemlist == NULL) }
goto bail;
rv = PyObject_CallMethod(itemlist, "sort", ""); mapping = PyDict_New();
if (rv == NULL) { if (mapping == NULL)
Py_DECREF(itemlist); goto bail;
if (PyDict_SetItemString(mapping, "d", dct) == -1) {
Py_DECREF(mapping);
goto bail; goto bail;
} }
items = itemlist; items = PyEval_EvalCode((PyCodeObject *)code, PyEval_GetGlobals(), mapping);
} Py_DECREF(mapping);
} else {
items = PyMapping_Items(dct);
}
if (items == NULL)
goto bail;
it = PyObject_GetIter(items); it = PyObject_GetIter(items);
Py_DECREF(items); Py_DECREF(items);
if (it == NULL) if (it == NULL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment