其他分享
首页 > 其他分享> > 我想与ujson保持OrderedDict的顺序

我想与ujson保持OrderedDict的顺序

作者:互联网

我函数的返回值类型是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的顺序?

解决方法:

使用ujson.dumps的sort_keys参数

ujson的行为如下:

> sort_keys = None(如果省略,则为默认值)-按照实现定义的顺序转储dict键,每次启动时都可能不同(但速度很快)
> sort_keys = True-转储前对字典键进行排序
> sort_keys = False-保留dict.items()提供的字典键顺序

因此,要使用ujson保留OrderedDict的排序,您需要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.

标签:ordereddictionary,python,ujson
来源: https://codeday.me/bug/20191026/1940047.html