dicts сохраняют итеративный порядок, если они не изменяются?

Я нашел этот сайт названным галерея Visual Studio - это имеет много дополнений Visual Studio. Я просматриваю его прямо сейчас, и я рекомендую всем посетить его.

19
задан Bakuriu 28 April 2014 в 16:38
поделиться

7 ответов

Вот что dict.items () документация говорит:

dict.items () возвращает копию списка словаря ( пары ключ, значение).

Если items (), keys (), values ​​(), iteritems (), iterkeys () и itervalues ​​() вызываются без промежуточных изменений словаря, списки будут напрямую соответствовать.

Думаю, разумно предположить, что порядок элементов не изменится, если все, что вы делаете, - это итерация.

31
ответ дан 30 November 2019 в 02:20
поделиться

Стандартный Python dict , как и большинство реализаций, не сохраняет порядок, поскольку доступ к элементам обычно осуществляется с помощью ключа.

Однако предсказуемая итерация иногда полезна и в Python 3.1 модуль коллекций содержит OrderedDict , который сохраняет порядок с минимальными издержками производительности.

12
ответ дан 30 November 2019 в 02:20
поделиться

Да. Никакой рандомизации. Есть еще более надежная гарантия - см. здесь .

5
ответ дан 30 November 2019 в 02:20
поделиться

collections.OrderedDict будет доступен в Python 2.7 в дополнение к Python 3.1.

Для версий Python ранее, чем 2.7, на PyPI есть collect.ordereddict , а в Django есть собственная реализация SortedDict .

4
ответ дан 30 November 2019 в 02:20
поделиться

Словарь Python не имеет понятия порядка. Таким образом, вы не можете зависеть от определенного порядка при повторении.

Это сделано умышленно: поскольку это хэш-карта, этого нельзя избежать, если вам нужен «быстрый поиск»! ​​

2
ответ дан 30 November 2019 в 02:20
поделиться

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

Сказав это, можно с уверенностью предположить, что порядок не изменится, если не будут добавлены элементы (там не было бы никакого смысла проделывать эту дорогостоящую операцию перетасовки вещей) и т. д., но, опять же, не полагайтесь на это.

1
ответ дан 30 November 2019 в 02:20
поделиться

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

2
ответ дан 30 November 2019 в 02:20
поделиться
Другие вопросы по тегам:

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