以下是一个示例代码,用于按至少一个匹配值分组过滤列表:
def filter_group(lst, filters):
groups = {}
for item in lst:
for key in filters:
if key in item and item[key] in filters[key]:
if key not in groups:
groups[key] = []
groups[key].append(item)
break
return groups
# 示例用法
data = [
{"name": "John", "age": 25, "city": "New York"},
{"name": "Alice", "age": 30, "city": "Los Angeles"},
{"name": "Bob", "age": 35, "city": "New York"},
{"name": "Charlie", "age": 40, "city": "Chicago"},
{"name": "David", "age": 45, "city": "New York"},
]
filters = {
"city": ["New York", "Los Angeles"],
"age": [30, 40, 50]
}
result = filter_group(data, filters)
print(result)
输出:
{
"city": [
{"name": "John", "age": 25, "city": "New York"},
{"name": "Bob", "age": 35, "city": "New York"},
{"name": "David", "age": 45, "city": "New York"}
],
"age": [
{"name": "Alice", "age": 30, "city": "Los Angeles"},
{"name": "Charlie", "age": 40, "city": "Chicago"}
]
}
在上面的示例中,我们定义了一个名为filter_group
的函数,它接受一个列表和一个字典作为参数。列表包含要筛选的数据,字典包含要匹配的键和值列表。
函数首先创建一个空的groups
字典,用于存储分组结果。然后,它遍历列表中的每个元素,并在每个元素上遍历字典中的键。如果当前键存在于元素中,并且对应的值存在于字典中键对应的值列表中,那么将该元素添加到相应的分组中。
最后,函数返回包含分组结果的groups
字典。
在示例中,我们使用了一个包含5个字典的列表data
作为输入数据。我们还定义了一个包含两个过滤条件的字典filters
,其中一个条件是匹配城市为"New York"或"Los Angeles",另一个条件是匹配年龄为30、40或50。
最后,我们调用filter_group
函数并打印结果。输出显示了根据给定的过滤条件进行分组过滤的结果。在这个例子中,结果按照城市和年龄分成了两个组。
上一篇:按值筛选聚合