2013-09-20 3 views
-3

Я довольно сильно пробил в этом некоторое время,Разбор словарей в пределах словаря в Python

меня есть словарь

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

Я пытаюсь разобрать через него и получить количество алфавитов в словарь. Любая помощь в этом отношении будет оценена по достоинству.

спасибо !!

+5

Что вы имеете в виду, для ввода образца в вопрос, каков ожидаемый результат? –

+2

Рассмотрите возможность форматирования этого кода, чтобы сделать его более ясным, что в нем находится. – millimoose

+1

Я пытаюсь получить количество алфавитов, в приведенном выше примере число будет: 4 – user2794177

ответ

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

Спасибо, много работает! – user2794177

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 
Смежные вопросы