Все примеры, которые я мог найти (in the documentation и т. Д.), Определяют OrderedDicts, передавая данные конструктору. Из документов:Возможно ли инициализировать пустой OrderedDict в Python с помощью предопределенного механизма сортировки?
# regular unsorted dictionary
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
С другой стороны, можно инициализировать OrderedDict с помощью не обеспечивает никаких параметров в конструктор, который приводит его сохранить порядок, в котором ключ, добавляются пары значений.
Я ищу конструкцию, которая напоминает следующее, за исключением без "d.items()". По сути, я прошу его запомнить механизм, не предоставив ему пример, который может показаться сумасшедшим. Является ли мой единственный вариант «взломать» это, предоставив начальный «d» (ниже) одним элементом или есть лучший способ?
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
Спасибо!
Да, это поведение по умолчанию? –
Сортированные словари не пересобирают содержимое при вставке. Они помнят порядок вставки и могут быть отсортированы, но они не просто автоматически сортируются при добавлении ключей. Для этого вы ищете что-то вроде SortedCollection. IIRC есть рецепт для одного (http://code.activestate.com/recipes/577197-sortedcollection/), который использует модуль bisect, но OrderedDict недостаточно для этого. –
Возможно, вы сможете опрокинуть свои собственные, возможно, подумайте об использовании ['heapq'] (https://docs.python.org/2/library/heapq.html#module-heapq), чтобы сохранить внутреннее упорядочение – GP89