【问题标题】:Parse dictionaries within a dictionary in python [closed]在python中的字典中解析字典[关闭]
【发布时间】:2013-09-20 16:44:57
【问题描述】:

有一段时间我对此感到非常震惊,

我有一本字典

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

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

谢谢!!

【问题讨论】:

  • 你是什么意思,“字母的数量?”对于问题中的示例输入,预期输出是什么?
  • 考虑格式化该代码,使其更清楚嵌套在哪里。
  • 我正在尝试获取字母的数量,对于上面的示例,数字将是:4
  • 这个数据结构是从哪里来的?
  • 我正在尝试构建一棵树,字典值将帮助我构建一棵树。字母是树的节点

标签: python dictionary tree


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,这行得通!
【解决方案2】:

也许你想要这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2021-10-25
    • 2018-02-11
    • 2016-11-24
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多