对列表进行排序:int对象不可调用

时间:2014-01-30 14:38:06

标签: python list sorting

我有一个漫长而复杂的方法,我将给出重要的部分:

def get_itter(self, sort_by=0): #sort_by is set to 0 for debugging purposes

    ...

    r = self.parser(self.in_file) # parse a csv file

    ...

    if type(sort_by) == int:
        r = [i for i in r]
        sort = sorted(r, key=sort_by)
    ...

现在我的问题是,当我运行此代码时,它会给我一个错误:TypeError: 'int' object is not callable。为什么它会给我这个错误?

P.S。我是Python的新手,我正在尝试为我没写的代码添加一些功能。

2 个答案:

答案 0 :(得分:4)

你设置:

sort_by=0

检查这是int

if type(sort_by) == int: # note: isinstance(sort_by, int) is preferred here

然后使用它:

sorted(r, key=sort_by)

当您将key传递给sorted时,它会尝试将该密钥应用于其排序序列中的所有项目,尝试使用每个项目调用它,例如:

sortvalues = [key(i) for i in seq]

如果key是整数,则无法调用它:

0(1)

给出了您所看到的TypeError

目前尚不清楚您要尝试做什么,但如果您想按序列中的sort_by项排序,则可以使用operator.itemgetter

from operator import itemgetter
sorted(r, key=itemgetter(sort_by))

答案 1 :(得分:1)

您将sort_by设置为0,然后将其作为关键功能传递给sorted。 Python将调用key作为定义排序键的函数,这对0来说是不可能的。