сложная сортировка на питоне, очень тривиальная, но интересная ошибка - PullRequest
0 голосов
/ 20 апреля 2011

Я хотел отсортировать по «множествам» или «а».Я пытаюсь использовать приведенную ниже информацию.

>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

http://wiki.python.org/moin/HowTo/Sorting/

Эта функция работает с 'count', но не с 'sets', 'a'.

class Number:
    def __init__(self, sets, count, a):
        self.sets = sets
        self.count = count
        self.a = a
    def __repr__(self):
        return repr((self.sets, self.count, self.a))


number_object=[([1, 3, 7], 2, 3), ([3, 7], 2, 2), ([2, 4], 2, 2), ([1, 7], 9, 2), ([1, 3], 2, 2), (7, 2, 0), (4, 2, 0), (3, 3, 0), (2, 2, 0), (1, 2, 0)]

Я хотел использовать тот, что ниже, но он не работает.Я использую то же самое, что и на веб-странице.

sorted(student_objects, key=attrgetter('sets', 'count'))

Забавно, что счетчик может работать, но не другой.

После нескольких попыток я решил использовать другой способ.Я могу получить тот же результат с этой инструкцией.

s=sorted(number_object, key=itemgetter(0), reverse=True )
sorted(s, key=itemgetter(1), reverse=True )

Но мне любопытно, почему оригинал не работает.есть кто-нибудь, кто хорош в питоне ??

1 Ответ

2 голосов
/ 20 апреля 2011

Если вы перейдете по ссылке, которую вы дали, вы поймете, что должны создавать экземпляры своих объектов следующим образом:

number_objects = [Number([1, 3, 7], 2, 3),
                  Number([3, 7], 2, 2), 
                  .......
                 ]

тогда

sorted(number_objects, key=attrgetter('sets', 'count'))

должно работать.

Например:

from operator import attrgetter
class Number:
    def __init__(self, sets, count, a):
        self.sets = sets
        self.count = count
        self.a = a
    def __repr__(self):
        return repr((self.sets, self.count, self.a))


number_objects = [Number([1, 3, 7], 2, 3), Number([3, 7], 2, 2),
                  Number([2, 4], 2, 2), Number([1, 7], 9, 2), 
                  Number([1, 3], 2, 2)]

print sorted(number_objects, key=attrgetter('sets', 'count'))

производит:

[([1, 3], 2, 2), ([1, 3, 7], 2, 3), ([1, 7], 9, 2), ([2, 4], 2, 2), ([3, 7], 2,
2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...