存在每个项目都是成员的列表?

时间:2016-05-30 15:12:21

标签: python list membership

我正在尝试为一些Spark Streaming作业编写一个抽象,每个作业都有一部分代码在所有这些作业之间相同(因此需要抽象)。

每个作业的格式都采用以下格式:

dStream \
        .filter(lambda rec: rec[self.EVENT_KEY_VALUE[0]] in list(self.EVENT_KEY_VALUE[1])) \
        .filter(lambda rec: self.EVENT_FIELDS.issubset(set(rec.keys()))) \

for INPUT in INPUTS:
        dStream \
            .map(lambda rdd: format_record_keys_for_salesforce(self.INPUT))

for map_func in OPTIONAL_MAPS:
        dStream \
            .map(map_func)

return dStream.map(self.OUTPUT.project_row)

始终有一个format_record_keys_for_salesforce地图阶段,始终是dStream.map(self.OUTPUT.project_row)阶段。问题来自前两个filter()。每个工作中几乎总是有两个过滤阶段,但有时工作不需要它。我宁愿让过滤器是冗余的,除了返回True之外什么都不做,而不是让dev需要编写额外的代码。

那么,我如何写一个list,其中任意值是其成员?我们事先并不知道这些值,只是它是列表的成员。

有点像:

>> 'a' in list(all)
True
>> 5 in list(all)
True
>> *anything* in list(all)
True
>> ALL_NATURAL_NUMBERS in list(all)
True
>> ALL_SUBSETS_OF_NATURAL_NUMBERS in list(all)
True 
etc...

这是可能的,还是我必须从抽象中删除这些阶段,并将其留给开发人员写作以确定他们是否需要过滤器?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您只想模仿__contains__运算符。所以可能是这样的:

class MockList(list):
    def __contains__(self, item):
        return True

答案 1 :(得分:1)

如果我理解正确,你需要一个类似于列表的对象,声称它包含任何对象。

您需要定义list-like class

我能想到的最简单的解决方案是肮脏的黑客攻击:

class MyList(list):
    def __contains__(self, item):
        return True

然后分配给anyValue的任何值:

>>> anyValue in MyList([])
True