4

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

4

3 回答 3

5

使用sort_keys参数ujson.dumps

的行为ujson如下:

  • sort_keys=None(如果省略,默认) - 以实现定义的顺序转储 dict 键,每次启动可能不同(但它很快)
  • sort_keys=True- 在转储前对字典键进行排序
  • 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))

测试:

$ 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=False

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

对象是一组无序的名称/值对。

于 2016-07-08T11:29:49.457 回答
0

像这样使用

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))
于 2016-07-06T04:38:09.847 回答
-1

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))
于 2016-07-06T04:48:34.350 回答