我正在尝试按几个条件对数组进行排序。Python的sorted函数可以将元组作为键。它还可以将lambda参数作为键。我尝试了一个lambda返回一个元组作为键,得到了TypeError: <lambda>() takes exactly 1 argument (2 given)
和一个lambda元组,得到了TypeError: 'tuple' object is not callable
。我在windows上使用python2.7.13。你知道吗
有人知道我为什么会出现这个错误,以及如何修复它吗?你知道吗
示例:
In [1]: message = {'tcu':1,'timestamps':{'device':23432}}
In [2]: message_array = [message, message]
In [3]: key = lambda message: (message['tcu'], message['timestamps']['device'])
In [4]: sorted(message_array,key)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-45bd2b89f64b> in <module>()
----> 1 sorted(message_array,key)
TypeError: <lambda>() takes exactly 1 argument (2 given)
In [5]: key = (lambda message: message['tcu'], lambda message: message['timestamps']['device'])
In [6]: sorted(message_array,key)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-45bd2b89f64b> in <module>()
----> 1 sorted(message_array,key)
TypeError: 'tuple' object is not callable
在python2.7中,函数
sorted
的签名是sorted(iterable[, cmp[, key[, reverse]]])
。您正在传递一个键函数作为第二个参数,而实际上它是第三个参数。要始终确保向函数传递正确的内容,请使用命名参数。他说因为
key
应该是一个接受一个参数的函数,所以传入lambda的元组是没有意义的。他说sorted
函数的第二个参数不是key
!!如果你打过去它起作用了。他说
这一定是一个常见的错误,这就是为什么Python3.x要求将键作为命名参数传递
相关问题 更多 >
编程相关推荐