我想用 ujson 保持 OrderedDict 的顺序
I want to keep order of OrderedDict with ujson
我函数的 return 值类型是 OrderedDict
,
现在我想把这个写在文件上:
这是我的代码:
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
with open(outFileName, 'w', encoding='utf-8') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4))
我希望它能保持字典在文件中的顺序,但它搞混了。
是不是因为用了ujson.dumps
?以及如何在输出文件中保持 OrderedDict
的顺序?
这样使用
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
with open(outFileName, 'w', encoding='utf-8') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4, sort_keys=False))
是的,似乎 ujson
默认情况下将字典转储为无序字典,这与内置的 json
包不同。将 sort_keys
参数设置为 true
以将数据转储为有序字典。
这是我的示例代码:
import ujson
import json
from collections import OrderedDict
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
# Maintain the ordering of dictionary upon dump.
with open("ordereddict2.txt", 'w') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4, sort_keys=True))
使用 ujson.dumps
的 sort_keys
参数
ujson
的行为如下:
sort_keys=None
(如果省略则默认)- 以实现定义的顺序转储 dict 键,每次启动可能不同(但速度很快)
sort_keys=True
- 在转储之前对字典键进行排序
sort_keys=False
- 保留 dict.items()
提供的字典键顺序
因此,要保留 OrderedDict
与 ujson
的顺序,您需要 sort_keys=False
.
测试
您可以这样查看:
import sys
import ujson
order = None
if len(sys.argv) == 2:
order = bool(int(sys.argv[1]))
mainDict = OrderedDict([('c',3),('b',2),('a',1)])
sys.stdout.write(ujson.dumps(mainDict, sort_keys=order))
测试:
$ python order.py # sort_keys=None
{"c":3,"a":1,"b":2}
$ python order.py # sort_keys=None
{"b":2,"c":3,"a":1}
$ python order.py 1 # sort_keys=True
{"a":1,"b":2,"c":3}
$ python order.py 0 # sort_keys=False
{"c":3,"b":2,"a":1}
备注
请注意,与 ujson
不同,内置 json
模块保留 sort_keys=None
以及 sort_keys=False
.
的键顺序
另请注意,尽管可以使用这些实现(ujson
和 json
)保留键顺序,但它是非标准的 JSON。见 json.org:
An object is an unordered set of name/value pairs.
我函数的 return 值类型是 OrderedDict
,
现在我想把这个写在文件上:
这是我的代码:
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
with open(outFileName, 'w', encoding='utf-8') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4))
我希望它能保持字典在文件中的顺序,但它搞混了。
是不是因为用了ujson.dumps
?以及如何在输出文件中保持 OrderedDict
的顺序?
这样使用
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
with open(outFileName, 'w', encoding='utf-8') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4, sort_keys=False))
是的,似乎 ujson
默认情况下将字典转储为无序字典,这与内置的 json
包不同。将 sort_keys
参数设置为 true
以将数据转储为有序字典。
这是我的示例代码:
import ujson
import json
from collections import OrderedDict
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
# Maintain the ordering of dictionary upon dump.
with open("ordereddict2.txt", 'w') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4, sort_keys=True))
使用 ujson.dumps
的 sort_keys
参数
ujson
的行为如下:
sort_keys=None
(如果省略则默认)- 以实现定义的顺序转储 dict 键,每次启动可能不同(但速度很快)sort_keys=True
- 在转储之前对字典键进行排序sort_keys=False
- 保留dict.items()
提供的字典键顺序
因此,要保留 OrderedDict
与 ujson
的顺序,您需要 sort_keys=False
.
测试
您可以这样查看:
import sys
import ujson
order = None
if len(sys.argv) == 2:
order = bool(int(sys.argv[1]))
mainDict = OrderedDict([('c',3),('b',2),('a',1)])
sys.stdout.write(ujson.dumps(mainDict, sort_keys=order))
测试:
$ python order.py # sort_keys=None
{"c":3,"a":1,"b":2}
$ python order.py # sort_keys=None
{"b":2,"c":3,"a":1}
$ python order.py 1 # sort_keys=True
{"a":1,"b":2,"c":3}
$ python order.py 0 # sort_keys=False
{"c":3,"b":2,"a":1}
备注
请注意,与 ujson
不同,内置 json
模块保留 sort_keys=None
以及 sort_keys=False
.
另请注意,尽管可以使用这些实现(ujson
和 json
)保留键顺序,但它是非标准的 JSON。见 json.org:
An object is an unordered set of name/value pairs.