Подтвердить что ты не робот

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

Если у меня есть словарь в Python, и я повторяю его один раз, а затем еще раз, гарантирован ли сохраненный порядок итераций, учитывая, что я не вставлял, не удалял и не обновлял какие-либо элементы в словаре? (Но я мог бы сделать поиск).

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Да. Там не было рандомизации. Там еще более сильная гарантия - см. здесь.

Ответ 4

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

Для версий Python, предшествующих версии 2.7, там collective.ordereddict в PyPI, а Django имеет свой собственный SortedDict.

Ответ 5

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

Это преднамеренно: так как это hashmap, это неизбежно, если вы хотите "быстрый поиск"! ​​

Ответ 6

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

Ответ 7

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

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