什么是适当的数据对象类型来保存按时间顺序的值列表

时间:2016-02-19 07:59:32

标签: python json dictionary

我的项目概述:我每5秒记录一些实时数据并以.json格式存储,每个文件的名称将是它被提取的日期(例如2016_02_19_07_10_43.json)。我想要一个单独的日期索引文件'它按时间顺序包含我获取的数据的日期(即文件名),以便稍后我可以通过索引调用每个数据集(每个文件也有一个相关的二进制数字)

这是我的数据样本(我也将其保存为.json)

{"2016_02_19_07_10_46": 1, "2016_02_18_10_55_38": 0, "2016_02_19_07_10_44": 1, "2016_02_19_07_10_43": 1, "2016_02_19_07_10_45": 1}

因为我将打开索引文件并添加一个新的日期/二进制对,然后保存回json,它似乎存储为dict是不合适的。我已经运行了一些测试,看起来如果你在一个设置中为一个dict添加5个值,然后写入json,它们按照它们被添加的顺序保持(即dicts有时会有顺序),但是一旦dict重新打开并且更多的值添加dict然后随机排序。

因此,如果我在一个设置中创建索引,字典就可以了,json将被排序,但是当我重新打开json并将其转换为python dict对象时,值会加密。那么列表对象是否合适?

只是为了证明我的意思我设计了这个测试:

test = {} 

for i in range(5):
    test[i] = i


with open( 'test.json', 'w') as f:
    json.dump(test, f)    

产地:

{"0": 0, "1": 1, "2": 2, "3": 3, "4": 4}

然后重新打开json并添加更多:

with open( 'test.json', 'r') as f:
    test=json.load(f)

for i in range(5,10):
    test[i] = i


with open( 'test.json', 'w') as f:
    json.dump(test, f)    

生成

{"5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "1": 1, "0": 0, "3": 3, "2": 2, "4": 4}

这很有意思,因为似乎所有新增加的值都会保持其顺序,但是dict中的现有值是混乱的。

对此有何评论以及如何保存索引?

编辑:@Serbitar 这很有意思,因为这可以预先制定有序的说法:

for i in range(4):
    test = {}

    for i in range(0,5):
        test[i] = i

    print test 

输出:

{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

1 个答案:

答案 0 :(得分:0)

词典不保证维持秩序。如果他们这样做,那是因为你很幸运。

如果您需要此行为,可以使用OrderedDict 顾名思义,它保留了密钥的顺序。