Почему Python заказывает мой словарь как так? [дубликат]

В документации для Image.open говорится, что он может принимать файл-подобный объект, поэтому вы должны иметь возможность передать объект io.BytesIO, созданный с объекта bytes, содержащий закодированный изображение:

from PIL import Image
import io

image_data = ... # byte values of the image
image = Image.open(io.BytesIO(image_data))
image.show()

41
задан Teifion 9 February 2009 в 04:03
поделиться

3 ответа

Для более старых версий Python реальным вопросом должен быть “why нет? ” — незаказанный словарь обычно реализуется как хеш-таблица , где порядок элементов четко определен, но не сразу очевиден (, документация Python раньше указывала это ). Ваши наблюдения соответствуют правилам хеш-таблицы отлично: очевидный произвольный, но постоянный порядок.

Python с тех пор изменил dict реализация для сохранения порядка вставки, и это , гарантировал с Python 3.7 . Реализация поэтому больше не составляет чистую хеш-таблицу (но хеш-таблица все еще , использовал в ее реализации).

79
ответ дан Konrad Rudolph 23 September 2019 в 15:07
поделиться

Единственная вещь о словаре, заказывая Вам может полагаться, то, что порядок останется тем же, если не будет никаких модификаций к словарю; например, итерация по словарю дважды, не изменяя его приведет к той же последовательности ключей. Однако, хотя порядок словарей Python детерминирован, это может быть под влиянием факторов, таких как порядок вставок и удалений, таким образом, равные словари могут закончиться с различными упорядочиваниями:

>>> {1: 0, 2: 0}, {2: 0, 1: 0}
({1: 0, 2: 0}, {1: 0, 2: 0})
>>> {1: 0, 9: 0}, {9: 0, 1: 0}
({1: 0, 9: 0}, {9: 0, 1: 0})
8
ответ дан Miles 23 September 2019 в 15:07
поделиться

спецификация для встроенного типа словаря отрицает любое сохранение порядка, лучше думать о словаре как о незаказанном наборе key: value пары...

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

10
ответ дан GarlicFries 23 September 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: