[英]Check existence of a key recursively and append to array of dict
我有一個命令如下
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
"key4" : {
"key5" : "value5"
}
}
如果字典具有key1 == value1,我將把字典追加到列表中。
假設key1 == value1在第一個鍵值對中不存在,而在嵌套dict中,如下所示:
{
"key2" : "value2",
"key3" : "value3",
"key4" : {
"key5" : "value5",
"key1" : "value1",
"key6" : {
"key7" : "value7",
"key1" : "value1"
}
},
"key8" : {
"key9" : "value9",
"key10" : {
"key11" : "value11",
"key12" : "value12",
"key1" : "value1"
}
}
}
在上面的字典中,我首先要檢查是否有key1 = value1。 如果沒有,我必須遍歷嵌套字典,如果它在嵌套字典中找到,則必須將該字典追加到列表中。 如果嵌套dict也是嵌套dict,但在第一個鍵值對中找到key1 = value1,則無需檢查內部dict(例如key4在第一個鍵值對中具有key1 = value1。因此,無需即使key6具有key1 = value1),也要檢查內部。
最后,我將得到以下列表。
[
{
"key5" : "value5",
"key1" : "value1",
"key6" : {
"key7" : "value7",
"key1" : "value1"
}
},
{
"key11" : "value11",
"key12" : "value12",
"key1" : "value1"
}
]
如何實現呢? 注意:字典的深度可能會有所不同
如果字典包含key1
和value1
我們將其添加到列表中並完成操作。 如果沒有,我們將陷入所有的字典是值dict
,做同樣的邏輯,以及
l = []
def append_dict(d):
if d.get("key1") == "value1":
l.append(d)
return
for k,v in d.items():
if isinstance(v, dict):
append_dict(v)
append_dict(d)
print l
一個迭代的解決方案將添加我們要檢查的字典到隊列:
from Queue import Queue
q = Queue()
l = []
q.put(d)
while not q.empty():
d = q.get()
if d.get("key1") == "value1":
l.append(d)
continue
for k,v in d.items():
if isinstance(v, dict):
q.put(v)
print l
正如@shashank所指出的,usinq而不是queue
也可以使用stack
,這是BFS vs DFS用於在字典中進行搜索
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.