Приказ не остался в порядке

Идея этого цикла состояла в том, чтобы перебирать список. Если определенное свойство объекта не было ключом OrderedDict, оно добавило бы его. Это словарь списков объектов

for object in someList: if object.DATE not in myOrderedDict: myOrderedDict[object.DATE]=[] myOrderedDict[object.DATE].append(object) 

в то время как он, кажется, делает OrderedDict в основном правильно, он заканчивается из строя, когда он печатается. Вместо того, чтобы иметь что-то вроде (01/13) (02/13) (03/13) это больше похоже на (02/13) (03/13) (01/13) .
Почему это происходит и как оно может быть исправлено?

6 Solutions collect form web for “Приказ не остался в порядке”

Похоже, вы ожидаете, что элементы в OrderedDict будут упорядочены по ключу, что не так. Заказ упорядочен по заказу элементов добавляется к нему. Из PEP 372 FAQ:

Поддерживает ли OrderedDict альтернативные заказы сортировки, например, в алфавитном порядке?

Нет. Те, кому нужны разные порядки сортировки, действительно должны использовать другую технику. OrderedDict – все о порядке ввода записи. Если какой-либо другой порядок представляет интерес, то другая структура (например, dbm в памяти), вероятно, лучше подходит.

У модуля сортированных контейнеров pure-Python есть тип SortedDict, который может вам помочь. Он автоматически сохраняет ключи dict в отсортированном порядке и хорошо документирован и проверен. Вы используете его так же, как и вы:

 >>> from sortedcontainers import SortedDict >>> mySortedDict = SortedDict() >>> for object in someList: >>> if object.DATE not in mySortedDict: >>> mySortedDict[object.DATE]=[] >>> mySortedDict[object.DATE].append(object) >>> list(mySortedDict.keys()) ['(01/13)', '(02/13)', '(03/13)'] 

Модуль отсортированных контейнеров очень быстрый и имеет страницу сравнения производительности с эталонами против альтернативных реализаций.

OrderedDict – это dict, который помнит порядок, в который были вставлены ключи. Таким образом, порядок dict – это порядок вставленного ключа. Он не будет сортировать ваш dict ключом.

OrderedDict запоминает порядок вставки, просто используйте обычный dict и сортируйте его перед его печатью. Вы можете сортировать свой dict в алфавитном порядке, как это

 sorted(myDict, key=myDict.get) 

Я издевался над примером того, что, по вашему мнению, вы получаете, и OrderedDict сохраняет заказ, который вы вставляете. Возможно, это не то, что вы хотите. В этом случае вы можете посмотреть на sorted () решение. Это должно уточнить:

 import collections class ob(): def __init__(self, d, v): self.DATE = d self.VALUE = v orderedDict = collections.OrderedDict() normalDict = {} someList = [ob('02/13', 2), ob('03/13',3), ob('04/13', 4) , ob('01/13', 5), ob('02/13', 15)] for a in someList: if a.DATE not in orderedDict: orderedDict[a.DATE]=[] normalDict[a.DATE]=[] orderedDict[a.DATE].append(a) normalDict[a.DATE].append(a) orderedDictSorted = collections.OrderedDict(sorted(orderedDict.items())) print 'Ordered Dict' print orderedDict.keys() print 'Dict' print normalDict.keys() print 'Ordered Dict Sorted' print orderedDictSorted.keys() 

Эта функциональность была в ruamel.ordereddict (доступна от PyPI) для Python 2, начиная с 2007 года:

 from ruamel.ordereddict import sorteddict 

(это быстрая реализация C, отказ от ответственности: я являюсь автором пакета tha t).

  • Сравнение строк двух текстовых файлов в python
  • Pandas - GroupBy, а затем слияние на исходном столе
  • Есть ли простой способ сделать работу юникода в python?
  • Получение ошибки «ImportError: невозможно импортировать имя HTTPSConnection» в Python 2.7
  • Как построить рамку данных pandas с помощью andrew_curves?
  • Различие XGBoost в тренировочных и тестовых функциях после преобразования в DMatrix
  • thread.start_new_thread не работает
  • Возврат строки из CSV, если указанное значение в строке соответствует условию
  •  
    Interesting Posts for Van-Lav

    Подсчитайте, сколько матриц имеет полный ранг для всех подматриц

    Сколько памяти в массиве numpy? ОЗУ является ограничивающим фактором?

    Когда использовать get, get_queryset, get_context_data в Django?

    Рекомендуемая библиотека / инфраструктура python для локального веб-приложения?

    PHP-вызов скрипта Python и сценарий python не могут записываться в файл

    functools.partial хочет использовать позиционный аргумент как аргумент ключевого слова

    Как я могу использовать скрипт в подпапках на gae?

    GetModuleHandleA не получает модули, не используемые python.exe при подключении к другому процессу

    Получить все ключи от объекта GroupBy в Pandas

    Раскрасить изображение, сохраняя прозрачность с помощью PIL?

    Почему PyCharm жалуется на недостающие модули при использовании абсолютного импорта?

    График разметки matplotlib с разными маркерами и цветами

    Как указать версию python, используемую для создания виртуальной среды?

    Google App Engine, как создать собственный файловый объект?

    Постройте большие точки внизу и меньше сверху

    Python - лучший язык программирования в мире.