Python排序 - 对象列表

Art*_*Art 35 python sorting list

如果可能的话,我想使用somelist.sort()方法来执行此操作.

我有一个包含对象的列表,所有对象都有一个成员变量resultType,它是一个整数.我想用这个数字对列表进行排序.

我该怎么做呢?

谢谢!

Mar*_*ers 73

somelist.sort(key = lambda x: x.resultType)
Run Code Online (Sandbox Code Playgroud)

这是另一种做你经常会看到的用法的方法:

import operator
s.sort(key = operator.attrgetter('resultType'))
Run Code Online (Sandbox Code Playgroud)

你可能还想看看sorted你是否还没有看过它.它不会修改原始列表 - 它会返回一个新的排序列表.


Riz*_*sim 10

当然,它不一定是一个lambda.传入的任何函数(例如下面的函数)都可以使用

def numeric_compare(x, y):
   if x > y:
      return 1
   elif x == y:
      return 0
   else:  #x < y
      return -1

a = [5, 2, 3, 1, 4]
a.sort(numeric_compare)
Run Code Online (Sandbox Code Playgroud)

来源:Python排序

所以,在你的情况下......

def object_compare(x, y):
   if x.resultType > y.resultType:
      return 1
   elif x.resultType == y.resultType:
      return 0
   else:  #x.resultType < y.resultType
      return -1

a.sort(object_compare)
Run Code Online (Sandbox Code Playgroud)

前面提到的lambda绝对是最紧凑的方式,但也有使用operator.itemgetter.

import operator
#L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
map(operator.itemgetter(0), L)
#['c', 'd', 'a', 'b']
map(operator.itemgetter(1), L)
#[2, 1, 4, 3]
sorted(L, key=operator.itemgetter(1))
#[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
Run Code Online (Sandbox Code Playgroud)

所以你要使用itemgetter('resultType').(假设定义了getitem.)

sorted(L, key=operator.itemgetter('resultType'))
Run Code Online (Sandbox Code Playgroud)