Python 使用嵌套元素处理dicts/json
tldrpython3.8。我希望使用一个没有空条目的“干净”dict来生成足够的json输出。对于这种情况,我需要一个处理它并支持嵌套结构的函数。此解决方案应该足够通用,可以处理n个嵌套对象 我希望使用一个没有空条目的“干净”dict,以在Python3.8中生成足够的json输出。在内部,我使用dict存储所有稍后将转储到磁盘的内容。我知道Python 使用嵌套元素处理dicts/json,python,json,dictionary,Python,Json,Dictionary,tldrpython3.8。我希望使用一个没有空条目的“干净”dict来生成足够的json输出。对于这种情况,我需要一个处理它并支持嵌套结构的函数。此解决方案应该足够通用,可以处理n个嵌套对象 我希望使用一个没有空条目的“干净”dict,以在Python3.8中生成足够的json输出。在内部,我使用dict存储所有稍后将转储到磁盘的内容。我知道{}是一个有效的json(而且{“数据”:{}}也是),但我知道它不是干净的。解析这种json只表明没有存储任何有用的内容 因此,我们的想法是通过检查添加
{}
是一个有效的json(而且{“数据”:{}}
也是),但我知道它不是干净的。解析这种json只表明没有存储任何有用的内容
因此,我们的想法是通过检查添加或删除到json的键/值来避免这种不干净的json。这应该支持嵌套值,如{“os”:{“网络”:{“ip”:“localhost”“}}}}
(任意深度),可以在OOP样式中使用,例如def handleElement(键、值、**节)
。如果该值为空,则应“清理”dict,如果该节没有内容,则删除每个节
经过数小时的搜索,我既没有找到一个python内置的方法,也没有在web上找到一些扩展或解决方案。我自己做了很多尝试,但是我发现没有办法在dict上进行平滑的迭代和操作。因为带有嵌套元素的dict的调用语法是dict[][]]…
你有什么好主意吗?如果您需要更多信息或不清楚,请询问
示例:
dict before: {}
call handleElement(“ip”,”localhost”, [os, network])
dic after: {“os”: {“network”: {“ip”: “localhost”}}
call handleElement (“ip”,””, [os, network])
dic after: {}
call handleElement (“ip”,”localhost”, [os, network])
call handleElement (“subnetmask”,”full”, [os, network])
dic after: {“os”: {“network”: {“ip”: “localhost”, “subnetmask”:”full”}}
call handleElement (“ip”,””, [os, network])
dic after: {“os”: {“network”: { “subnetmask”:”full”}}
您可能不需要递归方法,您需要的是
键/值
映射处理多层嵌套结构是递归解决方案的完美案例。堆栈溢出通常不会只是为您编写代码。。。相反,你需要开始,当你遇到逻辑问题时,来寻求帮助。。。我会从
def handleElement(key,value,parents_list)
@Błotosmętek开始:我完全同意,但是如果我需要dict访问的深度级别,我没有办法进行递归。@JoranBeasley:我知道,我也从来没有期望得到一个完整的解决方案,但我坚持从问题中提到的问题开始,需要一些好的想法;你有吗?很好,从没听说过dict.setdefault()!这是添加元素的好方法。找到一些关于的描述,我将接受此作为答案。这并不能解决整个问题,但它让我走上了正确的道路。可以使用类似的程序删除条目。首先迭代到键/值,然后检查它们是否需要被删除,然后上升,这可以递归地解决。
def handle_element(item, key, value, parent_list):
if value: # 1.
for parent in parent_list:
item.setdefault(parent, {}) # 2. add the parent with empty dict
item = item[parent] # go further in the dict
item[key] = value # 3.