使用sorted来排序对象列表

时间:2017-08-08 02:37:19

标签: python sorting

使用这样的for循环:

for k in time :
        def byPrice(stock):
            st = stock.get_momentum
            return st[k]
        s = sorted(obj, key=byPrice)

我想按每个stock对象中的动量数组中的第k个项对stock个对象的列表进行排序。

class stock:
    def __init__(self, name, price):
        self.name = name
        self.lens = len(price)

    def get_momentum(self):
        momentum = []
        for i in np.arange(lens):
             count = close[i]/close[i-60]
             momentum.append(count)
        return momentum

但我收到警告说'method' object is not subscriptable。错误发生在st[k]

2 个答案:

答案 0 :(得分:2)

只需添加括号:

for k in time :
        def byPrice(stock):
            st = stock.get_momentum()
            return st[k]
        s = sorted(obj, key=byPrice)

您需要实际调用您的方法。否则,st是方法对象,st[k]毫无意义。

您也可以在不使用

定义byPrice的情况下执行此操作
s = sorted(obj, key=lambda stock:stock.get_momentum()[k]) 

(可能更难阅读)。或者您可以在循环外定义byPrice,并将k作为另一个参数。

答案 1 :(得分:1)

您将变量st设置为实际的类方法stock.get_momentum,并且方法/函数对象没有基于索引的访问权限。这就是not subscriptable的含义。

只是一个小小的错字,一直在发生!将st = stock.get_momentum更改为st = stock.get_momentum()