也许这可以指导您正确的方向。byPath
收集嵌套的字典项。调用之后,您基本上可以将结果列表弄平,并检查是否满足您的条件(例如elem != ''
或类似条件not elem
):
x = #your x as posted
def byPath (tree, path):
try: head, tail = path.split ('.', 1)
except: return tree [path]
if head == 'XX': return [byPath (node, tail) for node in tree]
else: return byPath (tree [head], tail)
print (byPath (x, 'top.middle.XX.nested') )
print (byPath (x, 'top.last.XX.nested.XX.first') )
print (byPath (x, 'top.last.XX.nested.XX.second') )
print (byPath (x, 'other') )
:这部分实际计数那些不是空字符串的元素:
def count (result):
if isinstance (result, list):
total = 0
positive = 0
for e in result:
r = count (e)
total += r [1]
positive += r [0]
return (positive, total)
else: return (0 if result == '' else 1, 1)
a = byPath (x, 'top.middle.XX.nested')
b = byPath (x, 'top.last.XX.nested.XX.first')
c = byPath (x, 'top.last.XX.nested.XX.second')
d = byPath (x, 'other')
for x in [a, b, c, d]: print (count (x) )
将所有内容放在一起:
def f (tree, path):
return count (byPath (tree, path) )
for path in ['top.middle.XX.nested', 'top.last.XX.nested.XX.first', 'top.last.XX.nested.XX.second', 'other']:
print (path, f (x, path) )