Lambda函数输出的筛选器在Python 3中不起作用:参数无效,不是字符串或列



我遇到一个问题,其中一行现有代码在python 2.7中工作,在使用python 3时引发异常。下面是一个简单的例子,请注意我已经减少了";规则";以仅显示相关值。

>>> Rules=[{u'source': u'SOURCE_TABLE', u'target': u'TARGET_TABLE', u'mappings': [{u'action': u'lookup', u'tColumn': u'TARGET_COLUMN', u'sColumn': u'SOURCE_COLUMN', u'entity_id': u'1'}, {u'action': u'lookup', u'tColumn': u'TARGET_COLUMN1', u'sColumn': u'SOURCE_COLUMN1', u'entity_id': u'2'}]}]
>>> for rule in Rules:
...    m=filter(lambda mapping: mapping.get('action') in ['lookup'],rule['mappings'])
...
>>> m
[{u'action': u'lookup', u'entity_id': u'1', u'tColumn': u'TARGET_COLUMN', u'sColumn': u'SOURCE_COLUMN'}, {u'action': u'lookup', u'entity_id': u'2', u'tColumn': u'TARGET_COLUMN1', u'sColumn': u'SOURCE_COLUMN1'}]

在使用Python 3.7运行时,相同的代码引发了一个异常-

TypeError: Invalid argument, not a string or column: <function <lambda> at 0x7efdfbe708b0> of type <class 'function'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

我试着根据python 3文档将filter函数包装在列表中(filter(….((,但没有帮助。

我在Databricks中遇到了这个问题,@Barmar的评论是一个正确的提示。

不使用filter(),而是使用生成器函数:

m = [mapping for mapping in rule['mappings'] if mapping.get('action') in ['lookup']]

最新更新