python - 我想用 ujson 保持 OrderedDict 的顺序

标签 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))

我希望它能保持文件中字典的顺序,但它搞混了。

是不是因为使用了ujson.dumps?以及如何在输出文件中保留 OrderedDict 的顺序?

最佳答案

使用ujson.dumpssort_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=Nonesort_keys 保留键顺序=假

另请注意,尽管可以使用这些实现(ujsonjson)保留键顺序,但它是非标准 JSON。参见 json.org :

An object is an unordered set of name/value pairs.

关于python - 我想用 ujson 保持 OrderedDict 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215872/

相关文章:

python - Numpy arange float 不一致

来自有序字典的 Python Json

python - 从 python 有序字典中删除一个键的复杂性

Python 中断了对带有字符的 json 的解析\"

python - ujson 无法编码 numpy 数组

python - 使用嵌套结构按列连接 NumPy 数组

python - python 中的生成器比 while 循环更快吗?

python - Google CSE 未返回与 "real"google 搜索相同的结果

python - OrderedDict child 的深拷贝

python - python dict 到 json 二进制字符串的最快方法