像其他答案正确指出的那样,在Python 3.6之前,字典是 无序的 。
就是说,JSON还应该具有 _无序_映射,因此原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对象时,返回键的顺序可以是任意的。
因此,在JSON中保留映射顺序(例如PythonOrderedDict)的一种好方法是输出一个(键,值)对的数组,您在读取时将其转换回有序映射:
>>> from collections import OrderedDict>>> import json>>> d = OrderedDict([(1, 10), (2, 20)]) >>> print d[2]20>>> json_format = json.dumps(d.items()) >>> print json_format # Order maintained[[1, 10], [2, 20]]>>> OrderedDict(json.loads(json_format)) # Reading from JSON: works!OrderedDict([(1, 10), (2, 20)])>>> _[2] # This works!20
(请注意,从(键,值)对的 列表 构造有序字典的方式:
OrderedDict({1: 10, 2:20})将不起作用:它的键不一定像字典文字中那样是有序的,因为该文字创建了一个Python字典,其键是无序的。)PS :从Python
3.1开始,json模块提供了一个挂钩,用于自动将成对的列表(如上)转换为其他类似OrderedDict的对象。



