Berita bagus! Sejak versi 3.6 implementasi cPython telah mempertahankan urutan penyisipan kamus ( https://mail.python.org/pipermail/python-dev/2016-September/146327.html ). Ini berarti bahwa pustaka json sekarang mempertahankan pesanan secara default. Amati perbedaan perilaku antara python 3.5 dan 3.6. Kode:
import json
data = json.loads('{"foo":1, "bar":2, "fiddle":{"bar":2, "foo":1}}')
print(json.dumps(data, indent=4))
Dalam py3.5 pesanan yang dihasilkan tidak terdefinisi:
{
"fiddle": {
"bar": 2,
"foo": 1
},
"bar": 2,
"foo": 1
}
Dalam implementasi cPython python 3.6:
{
"foo": 1,
"bar": 2,
"fiddle": {
"bar": 2,
"foo": 1
}
}
Berita yang benar-benar hebat adalah bahwa ini telah menjadi spesifikasi bahasa pada python 3.7 (yang bertentangan dengan detail implementasi cPython 3.6+): https://mail.python.org/pipermail/python-dev/2017-December/151283 .html
Jadi jawaban untuk pertanyaan Anda sekarang menjadi: upgrade ke python 3.6! :)