Проблема со словарями заключается в их неопределенном порядке. Вы должны убедиться, что вы всегда получаете один и тот же результат из одинаковых словарей (если хотите сравнить их как строки).
Вы можете сделать это несколькими способами:
1) Хеш Python (только для проверки равенства; реализация хеша может быть специфичной для версии Python!)
print hash(str(sorted({1 : 2, 3 : 4}.items())))
2) MD5 (лучше всего, если вы хотите проверить равенство)
import hashlib
print hashlib.md5(str(sorted({1 : 2, 3 : 4}.items()))).hexdigest()
3) Травление (сериализация)
import pickle
serializedString = pickle.dumps({1 : 2, 3 : 4})
Модуль pickle
имеет разные протоколы (и я думаю, что он не сортирует элементы словаря), поэтому вы не можете выполнять сравнение строк. Вы должны извлечь данные из словаря, а затем напрямую сравнить старый и новый словарь (d = pickle.loads(serializedString)
).
4) Представление кортежа элемента (сериализация)
Согласно вашему комментарию, вы хотите что-то встраиваемое в исходный код Python. Как предложил С.Лотт, вы можете использовать объектное представление someDictionary.items()
, представляющее собой список, содержащий все комбинации (ключ, значение) в виде кортежей (скорее всего, несортированных):
>>> repr({1 : 2, 3 : 4}.items())
'[(1, 2), (3, 4)]'
Вы можете скопировать и вставить это представление в ваш исходный код, если хотите, чтобы объект сериализовался как строка.