对对象列表进行排序,TypeError:无法排序的类型

时间:2015-04-09 05:37:32

标签: python sorting lambda

我正在尝试对对象列表进行排序,但我收到以下错误:

subredditlist.sort(key=lambda x: x.count)
  TypeError: unorderable types: builtin_function_or_method() < builtin_function_or_method()

有问题的代码:

main.py:

for k, v in smapped.items():
     rlist.append(objclist(k, v))
 rlist.sort(key=lambda x: x.count)

其中subsmapped是字典

objclist.py:

class objclist:
    def __init__(self, name, count):
        self.name = name
        self.count = count

4 个答案:

答案 0 :(得分:3)

鉴于

class objclist:
    def __init__(self, name, count):
        self.name = name
        self.count = count

看起来像您创建此类的实例,将函数作为count参数传递给costructor。

for k, v in smapped.items():
     rlist.append(objclist(k, v))
 rlist.sort(key=lambda x: x.count)

看起来smapped在其值中包含函数/方法。

答案 1 :(得分:2)

我认为x.count是一个函数,而不是一个值。

如果是这种情况,请将lambda排序功能更改为lambda x: x.count()。 如果,请添加subredditlist的定义以澄清您的问题。

答案 2 :(得分:1)

要进行排序,列表必须包含实现__lt__方法且可相互比较的对象(即[1,2,3]&gt;&#34; 4&#34;表示无) - 或者更确切地说,关键功能必须返回一个可相互比较的对象。你的关键功能是返回一个无法比较的方法。您可能打算调用方法key=lambda x: x.count()

答案 3 :(得分:1)

错误是抱怨key是“内置 _function_or_method()”。这意味着x可能是strlisttuple(还有其他带有计数方法的内置函数吗?)

因此,传递给v的{​​{1}}实际上是内置对象的objclist方法。

也许您在构建count

时忘记了()