下面是一个示例代码,演示了如何按多个字段筛选数据:
from itertools import filterfalse
# 定义一个数据列表
data = [
{'name': 'Alice', 'age': 25, 'city': 'New York'},
{'name': 'Bob', 'age': 30, 'city': 'San Francisco'},
{'name': 'Charlie', 'age': 35, 'city': 'New York'},
{'name': 'David', 'age': 40, 'city': 'San Francisco'},
{'name': 'Eve', 'age': 45, 'city': 'New York'}
]
# 定义筛选条件
filters = [
{'field': 'age', 'operator': '>', 'value': 30},
{'field': 'city', 'operator': '==', 'value': 'San Francisco'}
]
# 定义一个函数来检查是否满足筛选条件
def check_filter(record, filter):
field = filter['field']
operator = filter['operator']
value = filter['value']
if operator == '>':
return record[field] > value
elif operator == '<':
return record[field] < value
elif operator == '==':
return record[field] == value
elif operator == '!=':
return record[field] != value
else:
return False
# 使用filter函数来筛选数据
filtered_data = filter(lambda x: all(check_filter(x, f) for f in filters), data)
# 使用filterfalse函数来筛选数据
filtered_data = filterfalse(lambda x: any(not check_filter(x, f) for f in filters), data)
# 打印筛选结果
for record in filtered_data:
print(record)
这个示例代码中,首先定义了一个数据列表data,其中包含了一些字典对象。然后定义了一个筛选条件列表filters,每个筛选条件都是一个字典对象,包括字段名、操作符和值。
接下来定义了一个check_filter函数,用来检查每个记录是否满足筛选条件。然后使用filter函数来筛选满足所有筛选条件的数据。也可以使用filterfalse函数来筛选不满足任何一个筛选条件的数据。
最后,遍历筛选结果,打印每个满足条件的记录。