在python中解析字典中的字典

时间:2013-09-20 16:44:58

标签: python dictionary tree

我对此感到非常震惊,

我有一本字典

tree = {
    'B': {
        '1': {
            'E': {
                '1': {
                    'D': {
                        '1': '1',
                        '0': '0'
                         }
                     },
                '0': {
                    'A': {
                        '1': '0',
                        '0': '1'
                         }
                     }
                 }
             },
          '0': '1'
       }
    }

我正在尝试解析它并获得字典中的字母数量。在这方面的任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

这是一种可能的解决方案,使用循环+递归:

def traverse(tree):
    if not isinstance(tree, dict):
        return tree.isalpha() # if leafs can't be alphabetic, simply return 0
    c = 0
    for k, v in tree.items():
        c += k.isalpha() + traverse(v)
    return c

或者更短一些,使用生成器表达式+递归:

def traverse(tree):
    if not isinstance(tree, dict):
        return tree.isalpha() # if leafs can't be alphabetic, simply return 0
    return sum(k.isalpha() + traverse(v) for k, v in tree.items())

无论哪种方式,它都有效。例如,使用问题中的输入:

tree = {'B': {'0': '1',
              '1': {'E': {'0': {'A': {'0': '1', '1': '0'}},
                          '1': {'D': {'0': '0', '1': '1'}}}}}}
traverse(tree)
=> 4

答案 1 :(得分:0)

也许你想要这个:

>>> tree = {'B': {'1': {'E': {'1': {'D': {'1': '1', '0': '0'}}, '0': {'A': {'1': '0', '0': '1'}}}}, '0': '1'}}
>>> print len(filter(lambda ch: ch.isalpha(), str(tree)))
4