python ordereddict:在dict中访问某个深度

时间:2015-05-15 11:53:09

标签: python dictionary

我有一个功能,它采用字典并以漂亮性感的方式打印它的内容。

我想编辑控制字典深度的函数,但我有点迷失。

这是功能:

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)
)

真的希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

更改功能的签名,使其接受两个新参数:depthmax_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