使用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響應、分析資料子集以及根據配置引數修改應用程式的行為。
廣告