Два одинаковых словаря отличаются (используя diff) после маринования

1

У меня есть словарь, ключи которого являются кортежи, такие как (int, str, int, str, int), а соответствующие значения являются списками с плавающей точкой одинакового размера.

Я дважды засолил словарь одним и тем же сценарием:

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, чтобы определить, идентичны ли два словаря?

  • 1
    Вам, вероятно, нужно использовать OrderedDict() , иначе они, скорее всего, будут переставлены.
  • 0
    diff не является хорошим способом для сравнения засоленных данных, даже для двоичных данных в целом.
Показать ещё 2 комментария
Теги:

1 ответ

0
Лучший ответ

В зависимости от того, какую версию Python вы используете, версии Python до v3.6 не помнят порядок вставки. Python v3.6 сделал это деталью реализации, а v3.7 - языковой особенностью.

Для обратной совместимости вы не должны зависеть от словаря, запоминающего порядок вставленных ключей. Вместо этого вы можете использовать OrderedDict из модуля Коллекции.

Кроме того, использование различий в данных маринованных диктов может показать различия в данных, даже если фактические словари эквивалентны - поскольку в отличие от списков дикты обычно не дают никаких гарантий относительно состояния заказа (см. Выше, когда это не так).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню