我有一个名为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的新手,所以一点帮助将不胜感激。谢谢!
答案 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)