Python:对类列表进行排序

时间:2015-11-24 20:47:46

标签: python

我有一个名为columnVariable的列表。此列表包含一组类的实例。每个类都有一个属性sequenceNumber

当我运行以下命令时:

for obj in columnVariable:
 print obj.sequenceNumber

我得到以下输出

3 
1
2
10
11

我想按属性sequenceNumber对列表进行排序。我喜欢的输出是:

1 
2
3
10
11

当我尝试以下操作时:

for obj in columnVariable:
 print sorted(obj.sequenceNumber)

我得到了输出

[u'3']
[u'1']
[u'2']
[u'0', u'1']
[u'1', u'1']

看起来每个序列号都被排序,而不是根据序列号对列表中的项进行排序。

我是python的新手,所以一点帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:4)

你可能想试试这个:

print sorted(columnVariable, key = lambda x: int(x.sequenceNumber))

答案 1 :(得分:3)

您应该使用key参数进行排序。例如

from operator import attrgetter

for obj in sorted(columnVariable, key=attrgetter('sequenceNumber')):
    print(obj)

编辑:

由于您希望以数字方式对字符串进行排序,因此在此处使用lambda函数更为合适

for obj in sorted(columnVariable, key=lambda x: int(x.sequenceNumber)):
    print(obj)

有些人很难理解lambda函数,因此我会提到可以为关键函数编写正常的函数定义

def int_sequence_number_key(obj):
    return int(obj.sequenceNumber)

for obj in sorted(columnVariable, key=int_sequence_number_key):
    print(obj)

现在也可以编写int_sequence_number_key的测试,这对于覆盖边角情况很重要(例如,如果你有None或其他一些无法转换为{{1}的对象会发生什么}})

答案 2 :(得分:0)

python '.'函数将sorted函数作为参数,可用于指定如何排序。在这种情况下,您将使用key

使用操作员模块可以更快地完成上述代码:

sorted(columnVariable, key=lambda x:x.sequenceNumber)