Как получить уникальные значения из массива объектов класса?

Есть массив объектов Card. В c# я могу сделать так

var lst = new List<Card>();
var rez = lst.DistinctBy(x=>x.suit).ToList();

То есть брать уникальные значения. Как сделать тоже самое в питон?

class Card(object):

    def __init__(self, rank, suit, dop):
        self.rank = rank
        self.suit = suit
        self.dop = dop

    def __eq__(self, other):
        return self.rank == other.rank and self.suit == other.suit

    def __lt__(self, other):
        return self.rank < other.rank

Ответы (1 шт):

Автор решения: gil9red

Действия:

  • Есть список из Card: lst = [<Card>, <Card>, ...]
  • Создание словаря, где ключом будет значение поля suit, а значением Card
  • Получение значений словаря

Пример:

rez = {x.suit: x for x in lst}.values()

Метод .values() вернет не список (list), а объект dict_values (его можно итерировать), а чтобы получить список:

rez = list({x.suit: x for x in lst}.values())
→ Ссылка