[英]python and dynamic-ish lambda combined with any/all matching?
我正在尝试做这样的事情:
filters = {'ok1': lambda x: x['a'] == 1, 'ok2': lambda x: x['b'] == 2}
d = [{'a': 1, 'b': 3}, {'a': 5, 'b': 2},{'a': 6, 'b': 7}]
c = filter(lambda z: filters['ok1'] and filters['ok2'], d)
e = filter(lambda z: filters['ok1'] or filters['ok2'], d)
print(d)
print(c)
print(e)
在这里我可以配置lambda函数列表,然后通过该列表过滤项目列表。 在这里,由于逻辑(或者我可能甚至使用any()
和all()
调用),我希望c
项为零, e
项为两项。
lambda z: filters['ok1'] and filters['ok2']
毫无意义,应该为lambda z: filters['ok1'](z) and filters['ok2'](z)
。
您甚至都没有调用我相信的函数。
多亏Sraw的回答,我才能够弄清楚自己的追求,而我的所有/全部工作如下:
filters = {'ok1': lambda x: x['a'] == 1, 'ok2': lambda z: z['b'] == 2}
d = [{'a': 1, 'b': 3}, {'a': 5, 'b': 2},{'a': 6, 'b': 7}]
alls = filter(lambda x: all(filters[z](x) for z in filters), d)
anys = filter(lambda x: any(filters[z](x) for z in filters), d)
print(alls)
print(anys)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.