gpt4 book ai didi

Python:如何按叶值过滤 n 嵌套的字典?

转载 作者:太空狗 更新时间:2023-10-30 00:08:03 25 4
gpt4 key购买 nike

我有一个看起来像这样的字典:

d = {'Food': {'Fruit'  : {'Apples'    : {'Golden Del.'  : ['Yellow'],
'Granny Smith' : ['Green'],
'Fuji' : ['Red'],
},
'Cherries' : ['Red'],
'Bananas' : ['Yellow'],
'Grapes' : {'Red Grapes' : ['Red'],
'Green Grapes' : ['Green'],
},
},
'Dessert': {'Baked Ds' : {'Cakes' : {'Yellow Cake' : ['Yellow'],
'Red Velvet' : ['Red'],
},
'Cookies' : ['Yellow'],
},
},
'Steak' : ['Red'],
},
'Other': ['Blue'],
}

基本上,一个 n 嵌套的字典,其中每个值要么是另一个字典,要么是一个包含单个项目的列表。

假设我想通过单个列表项(例如“红色”)对其进行过滤,结果将是:

d = {'Food': {'Fruit'  : {'Apples'    : {'Fuji'        : ['Red'],    
},
'Cherries' : ['Red'],
'Grapes' : {'Red Grapes' : ['Red'],
},
},
'Dessert': {'Baked Ds' : {'Cakes' : {'Red Velvet' : ['Red'],
},
},
},
'Steak' : ['Red'],
},
}

因此结构保持不变,但所有没有“红色”作为其列表项的内容都被删除,一直到层次结构。

有什么建议吗?我已经弄乱了一段时间并想出了这个,但它似乎不起作用:

def filterNestedDict(node, searchItem):
if isinstance(node,list):
return node
else:
for key, value in node.iteritems():
if isinstance(value,dict) and value is not {}:
return {key: filterNestedDict(value,searchItem)}
elif searchItem in value:
return {key: filterNestedDict(value,searchItem)}

return filterNestedDict(bigTree, searchItem)

我怀疑这只是递归的问题,但我们将不胜感激任何建议。

谢谢!

最佳答案

你非常接近,这应该对你有用:

def filter_nested_dict(node, search_term):
if isinstance(node, list):
if node[0] == search_term:
return node
else:
return None
else:
dupe_node = {}
for key, val in node.iteritems():
cur_node = filter_nested_dict(val, search_term)
if cur_node:
dupe_node[key] = cur_node
return dupe_node or None

关于Python:如何按叶值过滤 n 嵌套的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com