深度python字典递归
Posted
技术标签:
【中文标题】深度python字典递归【英文标题】:Deep python dictionary recursion 【发布时间】:2021-11-22 12:12:41 【问题描述】:我有一本 python 字典:
d =
"config":
"application":
"payment":
"dev":
"modes": "credit,debit,emi": ,
"company":
"address":
"city": "London": ,
"pincode": "LD568162": ,
,
"country": "United Kingdom": ,
"phone": "7865432765": ,
,
"levels": "0,1,2": ,
,
"prod": "modes": "credit,debit": , "levels": "0,1": ,
我想把它改成这样(如果值为空然后将键设为其父级的值)
d =
"config":
"application":
"payment":
"dev":
"modes": "credit,debit,emi",
"company":
"address":
"city": "London",
"pincode": "LD568162"
,
"country": "United Kingdom",
"phone": "7865432765"
,
"levels": "0,1,2"
,
"prod":
"modes": "credit,debit",
"levels": "0,1"
我尝试编写代码来遍历这个深度字典,但无法修改它以获得上述输出。请帮忙。
def recur(json_object):
for x in list(json_object.items()):
print(x)
recur(json_object[x])
d='config': 'application': 'payment': 'dev': 'modes': 'credit,debit,emi': , 'company': 'address': 'city': 'London': , 'pincode': 'LD568162': , 'country': 'United Kingdom': , 'phone': '7865432765': , 'levels': '0,1,2': , 'prod': 'modes': 'credit,debit': , 'levels': '0,1':
【问题讨论】:
我更新了我的答案,包括使用递归方法的另一个选项,就像你最初所做的那样。希望你也能从中有所收获。如果这是您需要的全部答案,您可以接受它作为答案:) 非常感谢@NielGodfreyPonciano 【参考方案1】:解决方案 1
我们可以使用带有队列的非递归方法将文档的每个内部/嵌套元素排入队列,如果嵌套值只是,则将其作为值:
# d = ...
queue = [d]
while queue:
data = queue.pop()
for key, value in data.items():
if isinstance(value, dict) and list(value.values()) == []:
data[key] = list(value.keys())[0]
elif isinstance(value, dict):
queue.append(value)
print(d)
输出
"config":
"application":
"payment":
"dev":
"modes": "credit,debit,emi",
"company":
"address":
"city": "London",
"pincode": "LD568162"
,
"country": "United Kingdom",
"phone": "7865432765"
,
"levels": "0,1,2"
,
"prod":
"modes": "credit,debit",
"levels": "0,1"
解决方案 2
这是一种递归方法
# d = ...
def recur(data):
for key, value in data.items():
if isinstance(value, dict) and list(value.values()) == []:
data[key] = list(value.keys())[0]
elif isinstance(value, dict):
recur(value)
recur(d)
print(d)
输出
与解决方案 1 相同【讨论】:
以上是关于深度python字典递归的主要内容,如果未能解决你的问题,请参考以下文章
python递归练习:生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级