给出一个带有字典的字典,我想一张一张地打印所有内容。例如,字典是:
data = {'school': 'abc college',
'class': {'A': 30, 'B': 25, 'C': 10},
'student': {'A': {'Peter': 'boy'},
'B': {'Mary': 'girl'},
'C': {'Charles': 'boy'}}}
我想将其打印为:
school: abc college
class:
A: 30
B: 25
C: 10
student:
A:
Peter: boy
B:
Mary: girl
C:
Charles: boy
这意味着如果字典中有字典,我想先打印最深层的字典,然后再进行下一个元素,类似于深度优先搜索的顺序。
但是,事先不知道字典的级别,因此似乎for循环不是一个好方法。我也尝试过iter
,但是字典不是可迭代的。我不知道如何实现这一目标。谢谢!
答案 0 :(得分:2)
这个问题是使用递归的好机会: 每当遇到字典值时,我们都会在此字典上再次调用该函数。
def recursive_print_dict( d, indent = 0 ):
for k, v in d.items():
if isinstance(v, dict):
print("\t" * indent, f"{k}:")
recursive_print_dict(v, indent+1)
else:
print("\t" * indent, f"{k}:{v}")
答案 1 :(得分:1)
您应该通过创建递归函数来解决此问题。
您必须遍历字典的键,并检查该值是否也是字典。如果是这样,请在该值上调用该函数,否则只需打印这些值并继续进行迭代即可。
答案 2 :(得分:1)
如果您只想漂亮地打印,可以尝试pprint
In [2]: from pprint import pprint
In [3]: data = {'school': 'abc college',
...: 'class': {'A': 30, 'B': 25, 'C': 10},
...: 'student': {'A': {'Peter': 'boy'},
...: 'B': {'Mary': 'girl'},
...: 'C': {'Charles': 'boy'}}}
In [4]: pprint(data)
{'class': {'A': 30, 'B': 25, 'C': 10},
'school': 'abc college',
'student': {'A': {'Peter': 'boy'},
'B': {'Mary': 'girl'},
'C': {'Charles': 'boy'}}}
如果您真的想要从头开始 你写一个递归函数
In [5]: data = {'school': 'abc college',
...: 'class': {'A': 30, 'B': 25, 'C': 10},
...: 'student': {'A': {'Peter': 'boy'},
...: 'B': {'Mary': 'girl'},
...: 'C': {'Charles': 'boy'}}}
In [6]: def pp(_dict, padding=""):
...: val_str = []
...: for k, v in _dict.items():
...: if type(v) == dict:
...: val_str.append("{padding}{key}:\n{val_str}".format(padding=padding, key=k, val_str=pp(v, padding+" ")))
...: else:
...: val_str.append("{padding}{key}: {val}".format(padding=padding, key=k, val=v))
...: return "\n".join(val_str)
...:
In [7]: print(pp(data))
school: abc college
class:
A: 30
B: 25
C: 10
student:
A:
Peter: boy
B:
Mary: girl
C:
Charles: boy
In [8]: