Как отфильтровать коллекцию объектов по значению поля?
Как в Python организовать и отфильтровать коллекцию объектов по значению поля? Мне нужно отфильтровать, чтобы быть равным точному значению и быть меньше значения.
И как это сделать эффективно? Если я храню свои объекты в списке, мне нужно перебрать весь список, потенциально содержащий сотни тысяч объектов.
@dataclass
class Person:
name: str
salary: float
is_boss: bool
# if to store objects in a list...
collection = [Person("Jack", 50000, 0), ..., Person("Jane", 120000, 1)]
# filtering in O(n), sloooooow
target = 100000
filtered_collection = [x for x in collection if salary < target]
PS: На самом деле мой вариант использования - это группировка по определенному полю, т.е.is_boss
и отфильтровать по другому, т.е.salary
. Как это сделать? Должен ли я пользовательitertools.groupby
по отсортированным спискам и сделать мои объекты сопоставимыми?