要按属性过滤嵌套对象,可以使用递归函数来遍历对象的属性,并根据属性值进行过滤。以下是一个示例代码:
def filter_nested_objects(obj, attr, value):
if isinstance(obj, dict):
filtered_obj = {}
for key, val in obj.items():
if key == attr and val == value:
return obj
elif isinstance(val, (dict, list)):
filtered_val = filter_nested_objects(val, attr, value)
if filtered_val is not None:
filtered_obj[key] = filtered_val
elif key != attr:
filtered_obj[key] = val
if filtered_obj:
return filtered_obj
elif isinstance(obj, list):
filtered_list = []
for item in obj:
filtered_item = filter_nested_objects(item, attr, value)
if filtered_item is not None:
filtered_list.append(filtered_item)
if filtered_list:
return filtered_list
return None
# 示例数据
data = {
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"country": "USA"
},
"friends": [
{
"name": "Alice",
"age": 28,
"address": {
"street": "456 Elm St",
"city": "Los Angeles",
"country": "USA"
}
},
{
"name": "Bob",
"age": 32,
"address": {
"street": "789 Oak St",
"city": "Chicago",
"country": "USA"
}
}
]
}
# 按属性过滤嵌套对象
filtered_data = filter_nested_objects(data, "city", "New York")
print(filtered_data)
输出结果为:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"country": "USA"
}
}
在上述示例中,filter_nested_objects
函数使用递归遍历嵌套对象,并根据attr
和value
进行属性过滤。如果找到匹配的属性值,就返回该对象或列表项。如果找到嵌套的字典或列表,就递归调用函数进行进一步的过滤。如果最终没有找到匹配的属性值,就返回None
。
下一篇:按属性过滤数据