我有一个dict如下
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
"key4" : {
"key5" : "value5"
}
}
如果dict有key1 == value1,我会将dict附加到列表中。
假设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"
}
}
}
在上面的dict中,我先检查是否有key1 = value1。如果没有,我将遍历嵌套的dict,如果它在嵌套的dict中找到,我将把该dict追加到列表中。如果嵌套的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"
}
]
如何实现这一目标? 注意:字典的深度可能会有所不同
答案 0 :(得分:3)
如果dict包含key1
和value1
,我们会将其添加到列表中并完成。
如果没有,我们将进入dict中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