我有一本字典,其键是像(int, str, int, str, int)
这样的元组,而对应的值是相同大小的float的列表。
我用相同的脚本对字典进行了两次腌制:
import pickle
with open(name, 'wb') as source:
pickle.dump(the_dict, source)
对于生成的两个二进制文件test_1
和test_2
,我运行
diff test_1 test_2
在终端(我使用的是macOS)中看看是否可以使用diff
来区分两者。但是,我收到了
Binary files test_1 and test_2 differ
为什么?同一本词典是否以不同的方式被腌制?这是否意味着我无法使用diff来判断两个字典是否相同?
答案 0 :(得分:0)
取决于所使用的Python版本,v3.6之前的Python版本不会记住插入的顺序。 Python v3.6 made this an implementation detail和v3.7使其成为语言功能。
为了向后兼容,您不应该依赖字典来记住插入键的顺序。相反,您可以使用“集合”模块中的OrderedDict。
此外,即使实际字典是等效的,在腌制的字典数据上使用diff可能也会显示数据中的差异-因为字典与列表不同,字典通常无法保证订单状态(请参见上文,当情况并非如此时)