字典递归缩进



我有以下代码,它试图涵盖字典遍历的大多数情况,并将其输出为缩进文本(根据字典中项目的嵌套进行缩进(。有两个问题:

  1. 我认为一开始的支票,它迎合了"raw_list";,有点麻烦,但我想不出更好的办法了
  2. 我无法使级别变量正确反映其位置

谢谢。我认为递归的其余部分是正确的。。。

a = {
"raw_list" : [1,2,3],
"a" : 1,
"b" : 2,
"mydict": {
"c":3,
"d":4
},
"mydict2": {
"c":5,
"d":6
},
"list1": [
{
"e1":7, 
"e2":8
},
{
"e3":9, 
"e4":10
}
],
"list2": [
{
"f1":11, 
"f2":12
}
]
}
def process_data(data,level):
if not isinstance(data,list) and not isinstance(data,dict) :
print("t"*level + str(data))
return
for element, val in data.items():
if isinstance(val, dict):
print("t"*level + "DICT:" + element)
level+=1
process_data(val,level)
elif isinstance(val, list):
print("t"*level + "LIST:" + element)
level += 1
for i, item in enumerate(val):
process_data(item,level)
else:
print("t"*level+element + ":" + str(val))
level-=1
process_data(a,1)

收到这个:

LIST:test
1
2
3
a:1
b:2
DICT:mydict
c:3
d:4
DICT:mydict2
c:5
d:6
LIST:list1
e1:7
e2:8
e3:9
e4:10
LIST:list2
f1:11
f2:12

但是想要这个:

LIST:test
1
2
3
a:1
b:2
DICT:mydict
c:3
d:4
DICT:mydict2
c:5
d:6
LIST:list1
e1:7
e2:8
e3:9
e4:10
LIST:list2
f1:11
f2:12

您正在为循环中的每个元素递增level。相反,请尝试删除level += 1,并将递增的level传递到递归调用中:process_data(item, level + 1)

def process_data(data,level):
if not isinstance(data,list) and not isinstance(data,dict) :
print("t"*level + str(data))
return
for element, val in data.items():
if isinstance(val, dict):
print("t"*level + "DICT:" + element)
process_data(val,level + 1)
elif isinstance(val, list):
print("t"*level + "LIST:" + element)
for i, item in enumerate(val):
process_data(item,level + 1)
else:
print("t"*level+element + ":" + str(val))

最新更新