我有一个功能,它采用字典并以漂亮性感的方式打印它的内容。
我想编辑控制字典深度的函数,但我有点迷失。
这是功能:
def print_dict(_dict, indent=""):
for k, v in _dict.items():
if hasattr(v, 'items'):
print "%s(%s::" % (indent, k)
print_dict(v, indent + " ")
print "%s)" % indent
elif isinstance(v, list):
print "%s(%s::" % (indent, k)
for i in v:
print_dict(dict(i), indent + " ")
print "%s)" % indent
else:
print "%s(%s::%s)" % (indent, k, v)
输出:
(Axis::
(@Name::kfcQ1[{kfcQ1_1}].kfcQ1_grid)
(@MdmName::kfcQ1[{kfcQ1_1}].kfcQ1_grid)
(@UseMetadataDefinition::true)
(@Label::kfcQ1_1. Veuillez sélectionner votre réponse)
(Labels::
(Label::
(@Language::FRA)
(@Text::kfcQ1_1. Veuillez sélectionner votre réponse?)
)
)
(Elements::
(Element::
(Style::None)
(@Name::UnweightedBase)
(@MdmName::)
(@IsHiddenWhenColumn::true)
(Labels::
(Label::
(@Language::FRA)
(@Text::Base brute)
)
)
)
)
期望的输出
print_dict(_dict, depth=0, indent="")
(Axis::
(@Name::kfcQ1[{kfcQ1_1}].kfcQ1_grid)
(@MdmName::kfcQ1[{kfcQ1_1}].kfcQ1_grid)
(@UseMetadataDefinition::true)
(@Label::kfcQ1_1. Veuillez sélectionner votre réponse)
)
真的希望这是有道理的。
答案 0 :(得分:2)
更改功能的签名,使其接受两个新参数:depth
和max_depth
:
def print_dict(_dict, indent="", depth=0, max_depth=-1):
在每次调用print_dict
之前,增加深度:
print_dict(v, indent + " ", depth=depth + 1, max_depth=max_depth)
print_dict(dict(i), indent + " ", depth=depth + 1, max_depth=max_depth)
最后,在功能开始时,针对depth
检查max_depth
:
def print_dict(_dict, indent="", depth=0, max_depth=-1):
if max_depth > 0 and depth > max_depth:
return