У меня есть список объектовсписок Включить в список списков с использованием атрибута объекта
objects = [<object 1>, <object 2>, <object 3>, <object 4>, <object 5>, <object 5>]
Каждый объект имеет атрибут даты (object.date). Я хотел бы разбить список на список списков, в которых каждый подсписок имеет только объекты с одинаковой датой. Есть ли какой-нибудь умный способ сделать это? Моего наивное решение
list_of_lists = []
for object in objects:
success = 0
for list in list_of_lists:
if object.date == list[0].date:
list.append(object)
success = 1
break
if not success:
list_of_lists.append([object])
это действительно дает правильный результат, но я просто интересно об оптимальном решении.
Вам нужно будет отсортировать 'objects' с' key = attrgetter ('date') 'first, если он еще не отсортирован по' date'. 'groupby' действует как GNU, используя' uniq'; он группирует только смежные записи. Конечно, если он уже отсортирован, то повторная сортировка будет незначительной (благодаря оптимизации TimSort для уже отсортированных списков), а 'groupby' победит на производительности, когда сортировка будет дешевой. – ShadowRanger
Вы забыли упомянуть одну вещь, список должен быть отсортирован, иначе результат groupby будет некорректным в некоторых случаях. – AndreyT
Да, я редактировал ответ, спасибо за ваше внимание. – Kasramvd