首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想用ujson来维持OrderedDict的秩序

我想用ujson来维持OrderedDict的秩序
EN

Stack Overflow用户
提问于 2016-07-06 03:18:38
回答 3查看 1.8K关注 0票数 4

函数的返回值类型是OrderedDict

现在我想把这个写在文件上:

这是我的密码:

代码语言:javascript
复制
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的顺序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-08 11:29:49

使用sort_keys参数的ujson.dumps

ujson的行为如下:

  • sort_keys=None (默认情况下省略)-按实现定义的顺序转储dict键,这可能在每次启动时都不同(但速度很快)
  • 转储前的sort_keys=True排序切分键
  • sort_keys=False -保留dict.items()提供的dict顺序

因此,要用OrderedDict保留ujson的顺序,您需要sort_keys=False

测试

以下是您可以检查的方法:

代码语言:javascript
复制
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))

测试:

代码语言:javascript
复制
$ 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

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

票数 5
EN

Stack Overflow用户

发布于 2016-07-06 04:38:09

像这样使用

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2016-07-06 04:48:34

是的,在默认情况下,ujson似乎将字典转储为无序字典,这与内置的json包不同。将sort_keys参数设置为true,以将数据转储为有序字典。

下面是我的示例代码:

代码语言:javascript
复制
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))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38215872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档