Если у меня есть словарь в Python, и я повторяю его один раз, а затем еще раз, гарантирован ли сохраненный порядок итераций, учитывая, что я не вставлял, не удалял и не обновлял какие-либо элементы в словаре? (Но я мог бы сделать поиск).
Do dicts сохраняют порядок итераций, если они не изменены?
Ответ 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
Как сказал Кристоф, словарь используется для организации пар ключ/значение из-за быстрого доступа, которое он предоставляет. Если для приложения требуется фиксированный индекс, вы должны посмотреть на другие структуры данных, которые предоставляют определенный/известный порядок.
Сказав это, следует с уверенностью предположить, что заказ не изменяется, если не добавлены элементы (не было бы никакого смысла делать эту дорогостоящую операцию перетасовки) и т.д., но, опять же, не полагайтесь на нем.