Два одинаковых словаря отличаются (используя diff) после маринования - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть словарь, ключи которого - кортежи типа (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 Ответ

0 голосов
/ 29 декабря 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...