sh *_*kim 3 python ordereddictionary ujson
我的函数的返回值类型是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))
Run Code Online (Sandbox Code Playgroud)
我希望它能保持文件中字典的顺序,但它混淆了.
是因为使用ujson.dumps?以及如何OrderedDict在输出文件中保留a的顺序?
sort_keys参数ujson.dumps行为ujson如下:
sort_keys=None (如果省略则默认) - 以实现定义的顺序转储dict键,每次启动时可能不同(但速度很快)sort_keys=True - 在转储之前对dict键进行排序sort_keys=False - 保留由提供的字典键顺序 dict.items()因此,为了保持OrderedDictwith的顺序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))
Run Code Online (Sandbox Code Playgroud)
测试:
$ 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}
Run Code Online (Sandbox Code Playgroud)
请注意,与ujson内置json模块不同,内置模块保留了键盘顺序sort_keys=None,以及sort_keys=False.
另请注意,尽管可以使用这些实现(ujson和json)保留键顺序,但它是非标准JSON.见json.org:
对象是一组无序的名称/值对.