Python 从嵌套项目中筛选关键字
Python 可以通过过滤嵌套项目中的关键字来提取复杂数据结构中的特定值,这些数据结构包含嵌套字典或列表。关键字是嵌套项目中某个特定值的唯一标识符。根据这个问题描述,它在数据操作、数据交互和 API 交互等各个应用领域有各种应用。
语法
以下示例中使用了以下语法-
append()
这是Python中的一个内置方法,它将元素添加到列表的末尾。
isintance()
Python 有一个内置函数叫做 isinstance(),它可以确定一个对象是否是某个类或类型的实例或子类。
values()
values()是Python中的内置函数,用于从字典中获取每个值。
pop()
Python中的内置方法pop()用于移除或返回给定索引值。
使用递归与isinstance()
在以下示例中,程序使用递归,即函数调用自身,其中在函数内部使用内置函数isinstance()来检查对象类型,并通过返回函数来使用字典推导。
示例
def filter_keys_nested_item(data, keys):
if isinstance(data, dict):
return {k: filter_keys_nested_item(v, keys) for k, v in data.items() if k in keys}
elif isinstance(data, list):
return [filter_keys_nested_item(item, keys) for item in data]
else:
return data
# create the nested item
nested_item = {
"key1": "value1",
"key2": {
"key3": "value3",
"key4": "value4"
},
"key5": [
{"key6": "value6"},
{"key7": "value7"}
]
}
filtered_item = filter_keys_nested_item(nested_item, ["key2", "key4", "key6"])
print(filtered_item)
输出
{'key2': {'key4': 'value4'}}
使用堆栈
在下面的示例中,程序根据特定的键删除嵌套项。程序会调整嵌套的字典和列表,以便正确地遍历嵌套项。因此,它遍历字典的嵌套结构,检查每个键是否与给定的键匹配。如果找到匹配的键,则将相应的值添加到过滤后的输出中。最后,它将使用函数返回来过滤嵌套项并显示结果。
示例
def filter_keys_nested_item(data, keys):
stack = [(data, {})]
while stack:
current, filtered = stack.pop()
if isinstance(current, dict):
for k, v in current.items():
if k in keys:
filtered[k] = filter_keys_nested_item(v, keys)
elif isinstance(v, (dict, list)):
stack.append((v, {}))
elif isinstance(current, list):
for item in current:
stack.append((item, {}))
return filtered
# create the nested item
nested_item = {
"key1": "value1",
"key2": {
"key3": "value3",
"key4": "value4"
},
"key5": [
{"key6": "value6"},
{"key7": "value7"}
]
}
filtered_item = filter_keys_nested_item(nested_item, ["key2", "key4", "key5"])
print(filtered_item)
输出
{'key2': {'key4': {}}, 'key5': {}}
使用递归生成器
在下面的示例中,程序使用了一个类似于列表推导的递归生成器,根据特定的键过滤嵌套的列表或字典。使用递归函数,它会提及特定的键来过滤嵌套项。如果找到匹配项,则允许对给定输入进行深层遍历,并生成相应的过滤输出。
示例
def filter_keys_nested_item(data, keys):
if isinstance(data, dict):
filtered = {k: filter_keys_nested_item(v, keys) for k, v in data.items() if k in keys}
elif isinstance(data, list):
filtered = [filter_keys_nested_item(item, keys) for item in data]
else:
return data
if filtered:
yield filtered
for item in filtered.values() if isinstance(filtered, dict) else filtered:
if isinstance(item, dict) or isinstance(item, list):
yield from filter_keys_nested_item(item, keys)
# create the nested item
nested_item = {
"key1": "value1",
"key2": {
"key3": "value3",
"key4": "value4"
},
"key5": [
{"key6": "value6"},
{"key7": "value7"}
]
}
filtered_item = next(filter_keys_nested_item(nested_item, ["key2", "key4", "key6"]))
print(filtered_item)
输出
{'key2': <generator object filter_keys_nested_item at 0x7f29d0e4aab0>}
结论
我们讨论了解决问题陈述的各种方法。对于许多应用程序来说,包括数据处理、数据分析、API交互和配置解析,从嵌套对象中过滤键是必不可少的。它使我们能够解析API的响应,分析数据的子集,并根据配置参数修改应用程序的行为。