Есть ли в словарях Python одно значение repr? - PullRequest
2 голосов
/ 22 октября 2009

В этом вопросе было предложено, чтобы вызов repr для словаря был хорошим способом сохранить его в другом словаре. Это будет зависеть от того, будет ли repr одинаковым, независимо от того, как заказаны ключи. Это тот случай?

PS. самым элегантным решением исходной проблемы было использование Frozenset

Ответы [ 3 ]

7 голосов
/ 22 октября 2009

Нет, порядок добавления ключей в словарь может влиять на внутреннюю структуру данных. Если два элемента имеют одинаковое значение хеш-функции и попадают в одно и то же место, то порядок их добавления в словарь имеет значение.

>>> (1).__hash__()
1
>>> (1 << 32).__hash__()
1
>>> repr({1: 'one', 1 << 32: 'not one'})
"{1: 'one', 4294967296L: 'not one'}"
>>> repr({1 << 32: 'not one', 1: 'one'})
"{4294967296L: 'not one', 1: 'one'}"
2 голосов
/ 22 октября 2009

Дело не в этом - порядок ключей произвольный.

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

0 голосов
/ 22 октября 2009

Если вы хотите сохранить словарь в другом словаре, нет необходимости сначала выполнять какие-либо преобразования. Если вы хотите использовать словарь в качестве ключа к другому словарю, вам необходимо преобразовать его, в идеале, в отсортированный набор кортежей ключ / значение.

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