Группировка по атрибуту с помощью itertools.groupby - PullRequest
2 голосов
/ 25 октября 2009

У меня есть список экземпляров класса «Хромосома».

Список отсортирован по атрибуту хромосомы 'уравнение'

Теперь я хочу удалить случаи, когда атрибут «уравнение» совпадает, оставив только один.

Я не знаю, как передать ключ, то есть?, Чтобы он группировался по «уравнению».

b = [a for a,b in groupby(list, ?)]

Ответы [ 2 ]

7 голосов
/ 25 октября 2009
import operator

[a for a, b in groupby(thelist, operator.attrgetter('equation')]

Кстати, не используйте встроенные имена типов (например, list, file и т. Д.) Для своих собственных идентификаторов, это сбивающая с толку и лучше избегаемая практика, которая в конечном итоге приведет к появлению особых ошибок, если вы не отучите себя от этого (то есть однажды вы будете поддерживать свой код и обнаружите, что используете list(sometuple), чтобы составить список из некоторого кортежа, или тому подобное ... и получите странные ошибки, если вы использовали list для обозначения что-то отличное от list в этой области! -).

3 голосов
/ 25 октября 2009

Вот как это сделать:

b = [a for a,b in groupby(list, key=lambda a: a.equation)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...