Harika haberlerimiz var! 3.6 sürümünden bu yana, cPython uygulaması sözlüklerin ekleme sırasını korumuştur ( https://mail.python.org/pipermail/python-dev/2016-September/146327.html ). Bu, json kütüphanesinin artık varsayılan olarak sipariş koruması olduğu anlamına gelir. Python 3.5 ve 3.6 arasındaki davranış farkını gözlemleyin. Kod:
import json
data = json.loads('{"foo":1, "bar":2, "fiddle":{"bar":2, "foo":1}}')
print(json.dumps(data, indent=4))
Py3.5 sürümünde ortaya çıkan sipariş tanımlanmamıştır:
{
"fiddle": {
"bar": 2,
"foo": 1
},
"bar": 2,
"foo": 1
}
Python 3.6'nın cPython uygulamasında:
{
"foo": 1,
"bar": 2,
"fiddle": {
"bar": 2,
"foo": 1
}
}
Gerçekten harika bir haber, bunun python 3.7'den (cPython 3.6+ uygulama detayının aksine) bir dil spesifikasyonu haline gelmesidir: https://mail.python.org/pipermail/python-dev/2017-December/151283 .html
Böylece sorunuzun cevabı şimdi: python 3.6'ya yükseltin! :)