Группировка Python Список объектов - PullRequest
0 голосов
/ 03 мая 2019

У меня есть список объектов Python типа класса Service. Я хотел бы сгруппировать этот список в соответствии с одним из членов данных этого класса

class service:
    def __init__(self, tasknum, candidatenum, features, cost):
        self.tasknum = tasknum
        self.candidatenum = candidatenum
        self.features = features
        self.cost = cost

s11 = service(1,1, features = [1], cost = 30)
s12 = service(1,2, features = [1], cost = 50)
s13 = service(1,3, features = [1], cost = 70)
s14 = service(1,4, features = [1], cost = 200)
s15 = service(1,5, features = [2], cost = 20)

lstservice = []
lst.append(s11)
lst.append(s12)
lst.append(s13)
lst.append(s14)
lst.append(s15)

Я бы хотел сгруппировать этот список lst по признакам списка, то есть, как указано выше, s11, s12, s13 и s14 образуют одну группу. Группировка будет выполняться по списку объектов таким образом, чтобы в одной группе все объекты имели одинаковое значение объектов, то есть объекты списка были бы одинаковыми для всех объектов в группе. Как мне это осуществить?

1 Ответ

2 голосов
/ 03 мая 2019

Алгоритм Scikit Learn или алгоритм нечеткого кластера очень излишний, когда у вас есть определенный список, по которому вы хотите сгруппировать данные.

Вы можете создать словарь, в котором функции будут храниться в виде ключей, а список служб - в качестве значений. Обратите внимание, что, поскольку списки являются изменяемыми, вам нужно превратить их в кортежи, прежде чем использовать их в качестве ключей (или просто всегда использовать кортежи, поскольку функции не кажутся изменяемыми).

from collections import defaultdict
grps = defaultdict(list)
for x in lst:
    grps[tuple(x.features)].append(x)
...