【问题标题】:How to sort a list of objects based on different object values in python?如何根据python中的不同对象值对对象列表进行排序?
【发布时间】:2014-09-23 01:37:37
【问题描述】:

我有一个有几个不同值的类。我希望能够按不同的值对这些对象的列表进行排序,但我不知道该怎么做。我希望能够针对任何值和两个方向(从最小到最大,反之亦然)对它们进行排序。

例如,下面是一个示例类,以及示例对象列表:

class Sample(object):
    def __init__(self, name, sampleValue1, sampleValue2):
        self.name
        self.value1 = sampleValue1
        self.value2 = sampleValue2

    def __repr__(self):
        return self.name

# creating sample objects for clarification
objectNames = ['A','B','C','D']
values1 = [3,4,1,2]
values2 = [1,4,2,3]
sampleObjects = list()
for i in xrange(4):
    obj = Sample(objectNames[i], values1[i], values2[i])
    sampleObjects.append(obj)

从每个对象值中对 sampleObjects 进行排序应该会产生以下内容。排序应返回按指定顺序排列的对象列表(下面使用对象名称)。

value1: [C,D,A,B]
value1 reversed: [B,A,D,C]
value2: [A,C,D,B]
value2 reversed: [B,D,C,A]

【问题讨论】:

    标签: python class sorting python-2.7 object


    【解决方案1】:

    Python 内置的sorted 函数有签名:

    sorted(iterable[, cmp[, key[, reverse]]])
    

    key 指定一个参数的函数,用于从每个列表元素中提取比较键

    对于您的情况:

    >>> sorted(sampleObjects, key=lambda obj: obj.value1)
    [C, D, A, B]
    >>> sorted(sampleObjects, key=lambda obj: obj.value2)
    [A, C, D, B]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2012-05-18
      • 2022-01-05
      相关资源
      最近更新 更多