python上的复杂排序,非常琐碎但有趣的bug

时间:2011-04-20 11:22:17

标签: python sorting

我想用'套'或'a'排序。我尝试使用以下信息。

>>> 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 )

但我很好奇为什么原来的不起作用。谁有擅长python的人?

1 个答案:

答案 0 :(得分:2)

如果你按照你提供的链接,你会发现你必须像这样实例化你的对象:

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)]