簡體   English   中英

遞歸檢查鍵的存在並將其追加到字典數組

[英]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"
   }
]

如何實現呢? 注意:字典的深度可能會有所不同

如果字典包含key1value1我們將其添加到列表中並完成操作。 如果沒有,我們將陷入所有的字典是值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM