我正在尝试对对象列表进行排序,但我收到以下错误:
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
答案 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
可能是str
,list
,tuple
(还有其他带有计数方法的内置函数吗?)
因此,传递给v
的{{1}}实际上是内置对象的objclist
方法。
也许您在构建count
()