腌制后,两个相同的字典有所不同(通过使用diff)

时间:2018-12-29 06:07:35

标签: python bash unix

我有一本字典,其键是像(int, str, int, str, int)这样的元组,而对应的值是相同大小的float的列表。

我用相同的脚本对字典进行了两次腌制:

import pickle
with open(name, 'wb') as source:
    pickle.dump(the_dict, source)

对于生成的两个二进制文件test_1test_2,我运行

diff test_1 test_2
在终端(我使用的是macOS)中

看看是否可以使用diff来区分两者。但是,我收到了

Binary files test_1 and test_2 differ

为什么?同一本词典是否以不同的方式被腌制?这是否意味着我无法使用diff来判断两个字典是否相同?

1 个答案:

答案 0 :(得分:0)

取决于所使用的Python版本,v3.6之前的Python版本不会记住插入的顺序。 Python v3.6 made this an implementation detail和v3.7使其成为语言功能。

为了向后兼容,您不应该依赖字典来记住插入键的顺序。相反,您可以使用“集合”模块中的OrderedDict。

此外,即使实际字典是等效的,在腌制的字典数据上使用diff可能也会显示数据中的差异-因为字典与列表不同,字典通常无法保证订单状态(请参见上文,当情况并非如此时)