Наиболее эффективный способ сортировки / категоризации объектов в списке на основе атрибута объекта - PullRequest
0 голосов
/ 23 июня 2010

У меня есть несортированный список объектов, каждый из которых имеет атрибут end_date.

Список выглядит как [obj1, obj2, obj3, <...>] в произвольном порядке.

Я хочу получить список, который выглядит следующим образом:

[["Суббота, 5 мая", [obj3, obj5]], ["Понедельник, 7 мая", [obj1, obj8, obj9]] ... etc]

В основном это просто список списков, где «ключ» - это дата от объектов, а значение для этого ключа - список объектов, имеющих этотДата.Не беспокойтесь о форматировании даты, это просто простая манипуляция с датой и временем.Я знаю, что это довольно легко сделать со словарем, но мне нужно получить список, отсортированный по ключам, а вы не можете сделать это со словарями (по крайней мере, с Python 2.6 IIRC)

Чтосамый эффективный способ сделать это?Я искал некоторые решения с кучей циклов for, но, похоже, я ошибаюсь.

Ответы [ 3 ]

1 голос
/ 23 июня 2010
itertools.groupby(sorted(L, key=operator.attrgetter('end_date')),
  key=operator.attrgetter('end_date'))
0 голосов
/ 23 июня 2010

Поместите его в словарь, затем используйте l=list(dictionary.iteritems()), чтобы получить список, и l.sort(), чтобы отсортировать его

0 голосов
/ 23 июня 2010

Вы сказали, что знаете, как довести это до диктата.Итак, просто отсортируйте результаты:

d = ToDict(...)
sorted_values = sorted(((date,list) for date,list in d.iteritems()))

Должно быть O(n log n)

Вы также можете указать метод сортировки по sorted, если хотите манипулировать типом даты.См. сортировку в обзоре Python .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...